Next: , Previous: , Up: Text Properties   [Contents][Index]


31.19.3 テキストプロパティの検索関数

テキストプロパティの通常の使用では、ほとんどの場合は複数または多くの連続する文字が同じ値のプロパティをもちます。文字を1つずつ調べるプログラムを記述するよりも、同じプロパティ値をもつテキスト塊(chunks of text)を処理するほうがより高速です。

以下はこれを行うことに使用できる関数です。これらはプロパティ値の比較にeqを使用します。すべての関数においてobjectのデフォルトはカレントバッファーです。

より良いパフォーマンスのためには、特に単一のプロパティを検索する関数におけるlimit引数の使用が重要です。さもないと興味のあるプロパティが変化しない場合に、バッファー終端までのスキャンで長い時間を要するでしょう。

これらの関数はポイントを移動しません。そのかわりに位置(またはnil )をリターンします。ポイントは常に文字と文字の間にあることを思い出してください。これらの関数によりリターンされる位置は、異なるプロパティをもつ2つの文字の間にあります。

Function: next-property-change pos &optional object limit

この関数は文字列かバッファーobject内の位置posから、何らかのテキストプロパティの変化が見つかるまでテキストを前方にスキャンして、変化のあった位置をリターンする。言い換えるとposの直後の文字とプロパティが等しくない、posの先にある最初の文字の位置をリターンする。

limitが非nilならスキャンは位置limitで停止する。そのポイントより前にプロパティが変化しなければ、この関数はlimitをリターンする。

プロパティがobject終端まで変化せず、かつlimitnilなら値はnil。値が非nilなら、それはpos以上の位置。limitposと等しいときのみ値はposになる。

以下はすべてのプロパティが定数であるようなテキスト塊によりバッファーをスキャンする方法の例:

(while (not (eobp))
  (let ((plist (text-properties-at (point)))
        (next-change
         (or (next-property-change (point) (current-buffer))
             (point-max))))
    ポイントからnext-changeへテキストを処理…
    (goto-char next-change)))
Function: previous-property-change pos &optional object limit

これはnext-property-changeと似ているが、posから前方ではなく後方にスキャンする点が異なる。値が非nilなら、それはpos以下の位置。limitposが等しい場合のみposをリターンする。

Function: next-single-property-change pos prop &optional object limit

この関数はプロパティprop内の変化にたいしてテキストをスキャンして、変化があった位置をリターンする。このスキャンは文字列かバッファーobject内の位置posから前方に行われる。言い換えるとposの直後の文字とプロパティpropが等しくない、posの先にある最初の文字の位置をリターンする。

limitが非nilならスキャンは位置limitで終了する。そのポイントより前にプロパティの変化がなければ、next-single-property-changelimitをリターンする。

プロパティがobject終端まで変化せず、かつlimitnilなら値はnil。値が非nilなら、それはpos以上の位置。limitposと等しいときのみ値はposになる。

Function: previous-single-property-change pos prop &optional object limit

これはnext-single-property-changeと似ているが、posから前方ではなく後方にスキャンする点が異なる。値が非nilなら、それはpos以下の位置。limitposが等しい場合のみposをリターンする。

Function: next-char-property-change pos &optional limit

next-property-changeと似ているが、これはテキストプロパティと同様にオーバーレイも考慮して、バッファー終端より前に変化が見つからなければ、nilではなくバッファー位置の最大をリターンする点が異なる(この点ではnext-property-changeよりも対応するオーバーレイ関数next-overlay-changeと似ている)。この関数はカレントバッファーだけを処理するのでobjectオペランドは存在しない。これはいずれかの種類のプロパティが変化した、次のアドレスをリターンする。

Function: previous-char-property-change pos &optional limit

これはnext-char-property-changeと似ているが、posから前方ではなく後方へスキャンすること、および変化が見つからなければバッファー位置の最小をリターンする点が異なる。

Function: next-single-char-property-change pos prop &optional object limit

next-single-property-changeと似ているが、これはテキストプロパティと同様にオーバーレイも考慮して、object終端より前に変化が見つからなければ、nilではなくobject内の有効な位置の最大をリターンする点が異なる。next-char-property-changeと異なり、この関数はobjectオペランドをもつobjectが非バッファーならテキストプロパティだけが考慮される。

Function: previous-single-char-property-change pos prop &optional object limit

これはnext-single-char-property-changeと似ているが、posから前方ではなく後方へスキャンすること、および変化が見つからなければobject内の有効な位置の最小をリターンする点が異なる。

Function: text-property-any start end prop value &optional object

この関数はstartendの間に少なくともプロパティpropに値valueをもつ文字が1つあれば非nilをリターンする。より正確には、これはそのような最初の文字の位置、それ以外はnilをリターンする。

5つ目のオプション引数objectはスキャンする文字列かバッファーを指定する。位置はobjectにたいして相対的。objectのデフォルトはカレントバッファー。

Function: text-property-not-all start end prop value &optional object

この関数はstartendの間に少なくともプロパティpropに値valueをもたない文字が1つあれば非nilをリターンする。より正確には、これはそのような最初の文字の位置、それ以外はnilをリターンする。

5つ目のオプション引数objectはスキャンする文字列かバッファーを指定する。位置はobjectにたいして相対的。objectのデフォルトはカレントバッファー。