カテゴリ(category)は、文字を構文的に分類する別の方法です。 必要に応じて複数のカテゴリを定義できて、 そうすると各文字に1つか複数のカテゴリを独立に設定できます。 構文クラスと異なり、カテゴリは互いに排他的ではありません。 1つの文字が複数のカテゴリに属することは普通にあります。
各バッファにはカテゴリテーブル(category table)があり、 どのカテゴリが定義済みでどの文字がどのカテゴリに属するかを記録しています。 各カテゴリテーブルはそれ独自のカテゴリ群を定義しますが、 それらは標準のカテゴリテーブルをコピーして普通は初期化されます。 そのため、すべてのモードで標準のカテゴリを使えます。
各カテゴリには名前があり、それは` 'から`~'までの
範囲のASCII印字文字です。
define-category
でカテゴリを定義するときにその名前を指定します。
カテゴリテーブルは実際には文字テーブル(see Char-Tables)です。
カテゴリテーブルの添字cの要素は、
カテゴリ集合(category set)です。
これはブールベクトルであり、文字cが属するカテゴリ群を表します。
このカテゴリ集合において、添字catの要素がt
であると、
catは集合の要素であることを意味し、
当該文字cはカテゴリcatに属することを意味します。
この関数は、名前をchar、説明文字列をdocstringとして 新たなカテゴリを定義する。
新たなカテゴリは、カテゴリテーブルtableに対して定義される。 tableのデフォルトは、カレントバッファのカテゴリテーブルである。
この関数は、カテゴリテーブルtableのカテゴリcategoryの 説明文字列を返す。
(category-docstring ?a) => "ASCII" (category-docstring ?l) => "Latin"
この関数は、カテゴリテーブルtableで現在定義されていない 新たなカテゴリ名(文字)を返す。 tableにおいて可能なすべてのカテゴリが使用済みであると
nil
を返す。
この関数は、カテゴリテーブルtableのコピーを作成しそれを返す。 tableを指定しない(あるいは
nil
)と、 現在のカテゴリテーブルのコピーを返す。 tableがカテゴリテーブルでないとエラーを通知する。
この関数は、新たなカテゴリ集合、つまり、 文字列categoriesに指定したカテゴリで 内容を初期化したブールベクトルを返す。 categoriesの要素はカテゴリ名であること。 新たなカテゴリ集合では、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に対するカテゴリ集合を返す。 これは、文字charが属するカテゴリ群を記録したブールベクトルである。 関数
char-category-set
は、カテゴリテーブルに 存在する同じブールベクトルを返すため、新たな領域を割り付けない。(char-category-set ?a) => #&128"\0\0\0\0\0\0\0\0\0\0\0\0\2\20\0\0"