:mod:`stringprep` --- Internet String Preparation
=================================================

.. module:: stringprep
   :synopsis: String preparation, as per RFC 3453

.. moduleauthor:: Martin v. Löwis <martin@v.loewis.de>
.. sectionauthor:: Martin v. Löwis <martin@v.loewis.de>

**Source code:** :source:`Lib/stringprep.py`

--------------

When identifying things (such as host names) in the internet, it is often
necessary to compare such identifications for "equality". Exactly how this
comparison is executed may depend on the application domain, e.g. whether it
should be case-insensitive or not. It may be also necessary to restrict the
possible identifications, to allow only identifications consisting of
"printable" characters.

:rfc:`3454` defines a procedure for "preparing" Unicode strings in internet
protocols. Before passing strings onto the wire, they are processed with the
preparation procedure, after which they have a certain normalized form. The RFC
defines a set of tables, which can be combined into profiles. Each profile must
define which tables it uses, and what other optional parts of the ``stringprep``
procedure are part of the profile. One example of a ``stringprep`` profile is
``nameprep``, which is used for internationalized domain names.

The module :mod:`stringprep` only exposes the tables from :rfc:`3454`. As these
tables would be very large to represent them as dictionaries or lists, the
module uses the Unicode character database internally. The module source code
itself was generated using the ``mkstringprep.py`` utility.

As a result, these tables are exposed as functions, not as data structures.
There are two kinds of tables in the RFC: sets and mappings. For a set,
:mod:`stringprep` provides the "characteristic function", i.e. a function that
returns ``True`` if the parameter is part of the set. For mappings, it provides the
mapping function: given the key, it returns the associated value. Below is a
list of all functions available in the module.


.. function:: in_table_a1(code)

   Determine whether *code* is in tableA.1 (Unassigned code points in Unicode 3.2).


.. function:: in_table_b1(code)

   Determine whether *code* is in tableB.1 (Commonly mapped to nothing).


.. function:: map_table_b2(code)

   Return the mapped value for *code* according to tableB.2 (Mapping for
   case-folding used with NFKC).


.. function:: map_table_b3(code)

   Return the mapped value for *code* according to tableB.3 (Mapping for
   case-folding used with no normalization).


.. function:: in_table_c11(code)

   Determine whether *code* is in tableC.1.1  (ASCII space characters).


.. function:: in_table_c12(code)

   Determine whether *code* is in tableC.1.2  (Non-ASCII space characters).


.. function:: in_table_c11_c12(code)

   Determine whether *code* is in tableC.1  (Space characters, union of C.1.1 and
   C.1.2).


.. function:: in_table_c21(code)

   Determine whether *code* is in tableC.2.1  (ASCII control characters).


.. function:: in_table_c22(code)

   Determine whether *code* is in tableC.2.2  (Non-ASCII control characters).


.. function:: in_table_c21_c22(code)

   Determine whether *code* is in tableC.2  (Control characters, union of C.2.1 and
   C.2.2).


.. function:: in_table_c3(code)

   Determine whether *code* is in tableC.3  (Private use).


.. function:: in_table_c4(code)

   Determine whether *code* is in tableC.4  (Non-character code points).


.. function:: in_table_c5(code)

   Determine whether *code* is in tableC.5  (Surrogate codes).


.. function:: in_table_c6(code)

   Determine whether *code* is in tableC.6  (Inappropriate for plain text).


.. function:: in_table_c7(code)

   Determine whether *code* is in tableC.7  (Inappropriate for canonical
   representation).


.. function:: in_table_c8(code)

   Determine whether *code* is in tableC.8  (Change display properties or are
   deprecated).


.. function:: in_table_c9(code)

   Determine whether *code* is in tableC.9  (Tagging characters).


.. function:: in_table_d1(code)

   Determine whether *code* is in tableD.1  (Characters with bidirectional property
   "R" or "AL").


.. function:: in_table_d2(code)

   Determine whether *code* is in tableD.2  (Characters with bidirectional property
   "L").

