You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
4.1 KiB

  1. :mod:`stringprep` --- Internet String Preparation
  2. =================================================
  3. .. module:: stringprep
  4. :synopsis: String preparation, as per RFC 3453
  5. :deprecated:
  6. .. moduleauthor:: Martin v. Löwis <martin@v.loewis.de>
  7. .. sectionauthor:: Martin v. Löwis <martin@v.loewis.de>
  8. When identifying things (such as host names) in the internet, it is often
  9. necessary to compare such identifications for "equality". Exactly how this
  10. comparison is executed may depend on the application domain, e.g. whether it
  11. should be case-insensitive or not. It may be also necessary to restrict the
  12. possible identifications, to allow only identifications consisting of
  13. "printable" characters.
  14. :rfc:`3454` defines a procedure for "preparing" Unicode strings in internet
  15. protocols. Before passing strings onto the wire, they are processed with the
  16. preparation procedure, after which they have a certain normalized form. The RFC
  17. defines a set of tables, which can be combined into profiles. Each profile must
  18. define which tables it uses, and what other optional parts of the ``stringprep``
  19. procedure are part of the profile. One example of a ``stringprep`` profile is
  20. ``nameprep``, which is used for internationalized domain names.
  21. The module :mod:`stringprep` only exposes the tables from RFC 3454. As these
  22. tables would be very large to represent them as dictionaries or lists, the
  23. module uses the Unicode character database internally. The module source code
  24. itself was generated using the ``mkstringprep.py`` utility.
  25. As a result, these tables are exposed as functions, not as data structures.
  26. There are two kinds of tables in the RFC: sets and mappings. For a set,
  27. :mod:`stringprep` provides the "characteristic function", i.e. a function that
  28. returns true if the parameter is part of the set. For mappings, it provides the
  29. mapping function: given the key, it returns the associated value. Below is a
  30. list of all functions available in the module.
  31. .. function:: in_table_a1(code)
  32. Determine whether *code* is in tableA.1 (Unassigned code points in Unicode 3.2).
  33. .. function:: in_table_b1(code)
  34. Determine whether *code* is in tableB.1 (Commonly mapped to nothing).
  35. .. function:: map_table_b2(code)
  36. Return the mapped value for *code* according to tableB.2 (Mapping for
  37. case-folding used with NFKC).
  38. .. function:: map_table_b3(code)
  39. Return the mapped value for *code* according to tableB.3 (Mapping for
  40. case-folding used with no normalization).
  41. .. function:: in_table_c11(code)
  42. Determine whether *code* is in tableC.1.1 (ASCII space characters).
  43. .. function:: in_table_c12(code)
  44. Determine whether *code* is in tableC.1.2 (Non-ASCII space characters).
  45. .. function:: in_table_c11_c12(code)
  46. Determine whether *code* is in tableC.1 (Space characters, union of C.1.1 and
  47. C.1.2).
  48. .. function:: in_table_c21(code)
  49. Determine whether *code* is in tableC.2.1 (ASCII control characters).
  50. .. function:: in_table_c22(code)
  51. Determine whether *code* is in tableC.2.2 (Non-ASCII control characters).
  52. .. function:: in_table_c21_c22(code)
  53. Determine whether *code* is in tableC.2 (Control characters, union of C.2.1 and
  54. C.2.2).
  55. .. function:: in_table_c3(code)
  56. Determine whether *code* is in tableC.3 (Private use).
  57. .. function:: in_table_c4(code)
  58. Determine whether *code* is in tableC.4 (Non-character code points).
  59. .. function:: in_table_c5(code)
  60. Determine whether *code* is in tableC.5 (Surrogate codes).
  61. .. function:: in_table_c6(code)
  62. Determine whether *code* is in tableC.6 (Inappropriate for plain text).
  63. .. function:: in_table_c7(code)
  64. Determine whether *code* is in tableC.7 (Inappropriate for canonical
  65. representation).
  66. .. function:: in_table_c8(code)
  67. Determine whether *code* is in tableC.8 (Change display properties or are
  68. deprecated).
  69. .. function:: in_table_c9(code)
  70. Determine whether *code* is in tableC.9 (Tagging characters).
  71. .. function:: in_table_d1(code)
  72. Determine whether *code* is in tableD.1 (Characters with bidirectional property
  73. "R" or "AL").
  74. .. function:: in_table_d2(code)
  75. Determine whether *code* is in tableD.2 (Characters with bidirectional property
  76. "L").