Next: , Previous: Changing Properties, Up: Text Properties


31.19.3 テキスト属性を探す関数

テキスト属性の典型的な用途では、 ほとんどの場合多くの連続した文字の1つの属性には同じ値があります。 1つずつ文字を調べるようにプログラムするよりは、 同じ属性値を持つテキストの塊を処理するほうがとても速いです。

このために使える関数をここで説明します。 これらは属性値の比較にeqを使います。 objectのデフォルトは、すべての場合でカレントバッファです。

高い効率のためには、これらの関数に引数limitを使うことが重要であり、 1つの属性を探す関数には特にあてはまります。 さもないと、読者が望む属性が変更されないような場合、 それらの関数はバッファの末尾まで走査して長い時間を費すことになります。

これらの関数はポイントを移動しませんが、そのかわりに 位置(あるいはnil)を返します。 位置はつねに2つの文字のあいだにあることに注意してください。 これらの関数が返す位置は、異なる属性を持つ2つの文字のあいだです。

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

この関数は、文字列やバッファであるobject内の位置posから テキスト属性のいずれかが異なるまでテキストを走査し、その変化する位置を返す。 いいかえれば、posの直後の文字のテキスト属性とは異なる 属性を持つposのあとにある最初の文字の位置を返す。

limitnil以外であると、limitの位置で走査を終える。 その箇所まで異なる属性がないと、 next-property-changelimitを返す。

limitnilでありobjectの末尾まで属性に変化がないと、 値はnilである。 値がnil以外であると、それはposより大きいか等しい位置である。 値がposに等しいのは、limitposに等しい場合のみである。

バッファからすべての属性が同じであるテキストの塊を 走査する方法の例をつぎに示す。

          (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: next-single-property-change pos prop &optional object limit

この関数は、文字列やバッファであるobject内の位置posから 属性propが異なるまでテキストを走査し、その変化する位置を返す。 いいかえれば、posの直後の文字の属性propとは異なる 属性propをもつposのあとにある最初の文字の位置を返す。

limitnil以外であると、limitの位置で走査を終える。 その箇所まで異なる属性がないと、 next-single-property-changelimitを返す。

limitnilでありobjectの末尾まで属性に変化がないと、 値はnilである。 値がnil以外であると、それはposより大きいか等しい位置である。 値がposに等しいのは、limitposに等しい場合のみである。

— Function: previous-property-change pos &optional object limit

これはnext-property-changeと同様であるが、 前方へではなくposから後方へ走査する。 値がnil以外であると、それはposより小さいか等しい位置である。 値がposに等しいのは、limitposに等しい場合のみである。

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

これはnext-single-property-changeと同様であるが、 前方へではなくposから後方へ走査する。 値がnil以外であると、それはposより小さいか等しい位置である。 値がposに等しいのは、limitposに等しい場合のみである。

— Function: next-char-property-change position &optional limit

これはnext-property-changeと同様であるが、 テキスト属性に加えてオーバレイも対象にする。 この関数はカレントバッファにのみ作用するため、 objectを表す引数はない。 どちらかの属性が異なるつぎの位置を返す。

— Function: previous-char-property-change position &optional limit

これはnext-char-property-changeと同様であるが、 前方へではなくposから後方へ走査する。

— 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のデフォルトはカレントバッファである。