\section{\module{stringprep} ---
         インターネットのための文字列調製}

\declaremodule{standard}{stringprep}
\modulesynopsis{RFC 3453 による文字列調製}
\moduleauthor{Martin v. L\"owis}{martin@v.loewis.de}
\sectionauthor{Martin v. L\"owis}{martin@v.loewis.de}

\versionadded{2.3}

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

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

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

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

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

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

\end{funcdesc}

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

\end{funcdesc}

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

\begin{funcdesc}{in_table_c11}{code}
\var{code} がテーブル {C.1.1} (ASCII スペース文字) かどうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_c12}{code}
\var{code} がテーブル {C.1.2} (非 ASCII スペース文字) かどうか判定します。 

\end{funcdesc}

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

\end{funcdesc}

\begin{funcdesc}{in_table_c21}{code}
\var{code} がテーブル {C.2.1} (ASCII 制御文字)
かどうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_c22}{code}
\var{code} がテーブル {C.2.2} (非 ASCII 制御文字)
かどうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_c21_c22}{code}
\var{code} がテーブル {C.2} 
(制御文字、C.2.1 および C.2.2 の和集合) かどうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_c3}{code}
\var{code} がテーブル {C.3} (プライベート利用) かどうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_c4}{code}
\var{code} がテーブル {C.4} (非文字コード点: non-character code points)
かどうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_c5}{code}
\var{code} がテーブル {C.5} (サロゲーションコード) かどうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_c6}{code}
\var{code} がテーブル {C.6} (平文:plain text として不適切) かどうか
判定します。 

\end{funcdesc}

\begin{funcdesc}{in_table_c7}{code}
\var{code} がテーブル {C.7} (標準表現:canonical representation 
として不適切) かどうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_c8}{code}
\var{code} がテーブル {C.8} (表示プロパティの変更または撤廃) か
どうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_c9}{code}
\var{code} がテーブル {C.9} (タグ文字) かどうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_d1}{code}
\var{code} がテーブル {D.1} (双方向プロパティ ``R'' または ``AL'' 
を持つ文字) かどうか判定します。 
\end{funcdesc}

\begin{funcdesc}{in_table_d2}{code}
\var{code} がテーブル {D.2} (双方向プロパティ ``L'' を持つ文字) 
かどうか判定します。 
\end{funcdesc}

