GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Categories.html ・ emacs-doc.conao3.com

36.8 カテゴリ

カテゴリは、文字を構文的に分類するための別の手法を提供します。必要に応じて複数のカテゴリを定義し、各文字を独立して1つ以上のカテゴリに割り当てることができます。構文クラスとは異なり、カテゴリは相互に排他的ではありません。1つの文字が複数のカテゴリに属することは一般的です。

各バッファには、どのカテゴリが定義されているか、またどの文字が各カテゴリに属しているかを記録したカテゴリテーブルがあります。各カテゴリテーブルは独自のカテゴリを定義しますが、通常は標準カテゴリテーブルからコピーして初期化されるため、すべてのモードで標準カテゴリが利用可能です。

各カテゴリには名前があり、これは ‘ ’ から ‘~’ の範囲の ASCII 印字文字です。define-category を用いてカテゴリを定義する際に、その名前を指定します。

カテゴリテーブルは、実際にはcharテーブル(Char-Tablesを参照)です。インデックスcのカテゴリテーブルの要素はカテゴリセット—bool型のベクトル—であり、文字cがどのカテゴリに属するかを示します。このカテゴリセットにおいて、インデックスcatの要素がtである場合、カテゴリcatがセットのメンバーであり、文字cがカテゴリcatに属することを意味します。

続く3つの関数では、オプション引数 table のデフォルト値は現在のバッファのカテゴリテーブルとなります。

関数: define-category char docstring &optional table

この関数は、カテゴリテーブル table に対して、名称 char、ドキュメント docstring を持つ新しいカテゴリを定義します。

以下に、強い右から左への書字方向を持つ文字(双方向表示を参照)のための新しいカテゴリを定義し、それを特殊なカテゴリテーブルで使用する例を示します。文字の書字方向に関する情報を取得するため、このサンプルコードではUnicodeプロパティ「bidi-class」(bidi-classを参照)を使用しています。

(defvar special-category-table-for-bidi
  ;;     Make an empty category-table.
  (let ((category-table (make-category-table))
        ;; Create a char-table which gives the 'bidi-class' Unicode
        ;; property for each character.
        (uniprop-table
         (unicode-property-table-internal 'bidi-class)))
    (define-category ?R "Characters of bidi-class R, AL, or RLO"
                     category-table)
    ;; Modify the category entry of each character whose
    ;; 'bidi-class' Unicode property is R, AL, or RLO --
    ;; these have a right-to-left directionality.
    (map-char-table
     (lambda (key val)
       (if (memq val '(R AL RLO))
           (modify-category-entry key ?R category-table)))
     uniprop-table)
    category-table))
関数: category-docstring category &optional table

この関数は、カテゴリテーブル table におけるカテゴリ category のドキュメント文字列を返します。

(category-docstring ?a)
     ⇒ "ASCII"
(category-docstring ?l)
     ⇒ "Latin"
関数: get-unused-category &optional table

この関数は、table で現在定義されていないカテゴリ名(文字列)を返します。table で考えられるすべてのカテゴリが使用されている場合は、nil を返します。

関数: category-table

この関数は、現在のバッファのカテゴリテーブルを返します。

関数: category-table-p object

この関数は、object がカテゴリテーブルであれば t を、そうでなければ nil を返します。

関数: standard-category-table

この関数は、標準のカテゴリテーブルを返します。

関数: copy-category-table &optional table

この関数は table のコピーを作成して返します。table が指定されていない(または nil である)場合は、標準カテゴリテーブルのコピーを返します。それ以外の場合、table がカテゴリテーブルでないときはエラーが通知されます。

関数: set-category-table table

この関数は、table を現在のバッファのカテゴリテーブルに設定します。table を返します。

関数: make-category-table

これにより、空のカテゴリテーブルが作成され、返されます。空のカテゴリテーブルでは、どのカテゴリも割り当てられておらず、どの文字もどのカテゴリにも属していません。

関数: make-category-set categories

この関数は、文字列 categories に列挙されたカテゴリを初期内容とする新しいカテゴリセット(bool型のベクトル)を返します。categories の要素はカテゴリ名である必要があり、新しいカテゴリセットでは、それら各カテゴリに対して t が、それ以外のすべてのカテゴリに対して nil が割り当てられます。

(make-category-set "al")
     ⇒ #&128"\0\0\0\0\0\0\0\0\0\0\0\0\2\20\0\0"
関数: char-category-set char

この関数は、現在のバッファのカテゴリテーブルにおける文字 char に設定されたカテゴリを返します。これは、文字 char がどのカテゴリに属するかを記録する bool-vector です。関数 char-category-set は、カテゴリテーブルに存在するものと同じ bool-vector を返すため、メモリを割り当てません。

(char-category-set ?a)
     ⇒ #&128"\0\0\0\0\0\0\0\0\0\0\0\0\2\20\0\0"
関数: category-set-mnemonics category-set

この関数は、カテゴリ集合 category-set を、その集合に属するカテゴリを示す文字を含む文字列に変換します。

(category-set-mnemonics (char-category-set ?a))
     ⇒ "al"
関数: modify-category-entry char category &optional table reset

この関数は、カテゴリテーブル table(デフォルトでは現在のバッファのカテゴリテーブル)における char のカテゴリセットを変更します。char には文字、または (min . max) 形式のコンスセルを指定できます。後者の場合、この関数は min から max まで(両端を含む)の範囲にあるすべての文字のカテゴリセットを変更します。

通常は、カテゴリセットに category を追加して変更します。ただし、reset が nil でない場合は、代わりに category を削除します。

コマンド: describe-categories &optional buffer-or-name

この関数は、現在のカテゴリテーブルにおけるカテゴリ仕様を記述します。記述内容をバッファに挿入し、そのバッファを表示します。buffer-or-name が nil 以外の場合は、代わりにそのバッファのカテゴリテーブルを記述します。