
:mod:`stringprep` --- インターネットのための文字列調製
======================================================

.. module:: stringprep
   :synopsis: RFC 3453 による文字列調製
   :deprecated:
.. moduleauthor:: Martin v. Löwis <martin@v.loewis.de>
.. sectionauthor:: Martin v. Löwis <martin@v.loewis.de>


.. versionadded:: 2.3

(ホスト名のような) インターネット上にある存在に識別名をつける際、しばしば識別名間の "等価性" 比較を行う必要があります。
厳密には、例えば大小文字の区別をするかしないかいったように、比較をどのように行うかはアプリケーションの領域に依存します。また、例えば "印字可能な"
文字で構成された識別名だけを許可するといったように、可能な識別名を制限することも必要となるかもしれません。

:rfc:`3454` では、インターネットプロトコル上で Unicode 文字列を "調製 (prepare)"
するためのプロシジャを定義しています。文字列は通信路に載せられる前に調製プロシジャで処理され、その結果ある正規化された形式になります。RFC
ではあるテーブルの集合を定義しており、それらはプロファイルにまとめられています。各プロファイルでは、どのテーブルを使い、 ``stringprep``
プロシジャのどのオプション部分がプロファイルの一部になっているかを定義しています。 ``stringprep`` プロファイルの一つの例は
``nameprep`` で、国際化されたドメイン名に使われます。

:mod:`stringprep` は RFC 3453 のテーブルを公開しているに過ぎません。これらのテーブルは辞書やリストとして表　現するには
バリエーションが大きすぎるので、このモジュールでは Unicode  文字データベースを内部的に利用しています。モジュールソースコード自体は
``mkstringprep.py`` ユーティリティを使って生成されました。

その結果、これらのテーブルはデータ構造体ではなく、関数として公開されています。RFC には 2 種類のテーブル: 集合およびマップ、
が存在します。集合については、 :mod:`stringprep` は "特性関数 (characteristic function)" 、すなわち引数が
集合の一部である場合に真を返す関数を提供します。マップに対しては、マップ関数: キーが与えられると、それに関連付けられた値を返す関数、
を提供します。以下はこのモジュールで利用可能な全ての関数を列挙したものです。


.. function:: in_table_a1(code)

   *code* がテーブル A.1 (Unicode 3.2 における未割り当てコード点:  unassigned code point) かどうか判定します。


.. function:: in_table_b1(code)

   *code* がテーブル B.1 (一般には何にも対応付けられていない: commonly mapped to nothing) かどうか判定します。


.. function:: map_table_b2(code)

   テーブル B.2 (NFKC で用いられる大小文字の対応付け) に従って、 *code* に対応付けられた値を返します。


.. function:: map_table_b3(code)

   テーブル B.3  (正規化を伴わない大小文字の対応付け) に従って、 *code* に対応付けられた値を返します。


.. function:: in_table_c11(code)

   *code* がテーブル C.1.1 (ASCII スペース文字) かどうか判定します。


.. function:: in_table_c12(code)

   *code* がテーブル C.1.2 (非 ASCII スペース文字) かどうか判定します。


.. function:: in_table_c11_c12(code)

   *code* がテーブル C.1  (スペース文字、C.1.1 および C.1.2 の和集合) かどうか判定します。


.. function:: in_table_c21(code)

   *code* がテーブル C.2.1 (ASCII 制御文字) かどうか判定します。


.. function:: in_table_c22(code)

   *code* がテーブル C.2.2 (非 ASCII 制御文字) かどうか判定します。


.. function:: in_table_c21_c22(code)

   *code* がテーブル C.2  (制御文字、C.2.1 および C.2.2 の和集合) かどうか判定します。


.. function:: in_table_c3(code)

   *code* がテーブル C.3 (プライベート利用) かどうか判定します。


.. function:: in_table_c4(code)

   *code* がテーブル C.4 (非文字コード点: non-character code points) かどうか判定します。


.. function:: in_table_c5(code)

   *code* がテーブル C.5 (サロゲーションコード) かどうか判定します。


.. function:: in_table_c6(code)

   *code* がテーブル C.6 (平文:plain text として不適切) かどうか判定します。


.. function:: in_table_c7(code)

   *code* がテーブル C.7 (標準表現:canonical representation  として不適切) かどうか判定します。


.. function:: in_table_c8(code)

   *code* がテーブル C.8 (表示プロパティの変更または撤廃) かどうか判定します。


.. function:: in_table_c9(code)

   *code* がテーブル C.9 (タグ文字) かどうか判定します。


.. function:: in_table_d1(code)

   *code* がテーブル D.1 (双方向プロパティ "R" または "AL"  を持つ文字) かどうか判定します。


.. function:: in_table_d2(code)

   *code* がテーブル D.2 (双方向プロパティ "L" を持つ文字)  かどうか判定します。

