| :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> |
| |
| |
| 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"). |
| |