###
2 メソッドおよびスロット関数 (slot function)

以下の API は Unicode オブジェクトおよび文字列を入力に取り (説明では、どちらも文字列と表記しています)、場合に応じて Unicode オブジェクトか整数を返す機能を持っています。

これらの関数は全て、例外が発生した場合には `NULL` または `-1` を返します。

PyObject* `PyUnicode_Concat`( | PyObject *left, PyObject *right)

  戻り値: 新たな参照.
  二つの文字列を結合して、新たな Unicode 文字列を生成します。

PyObject* `PyUnicode_Split`( | PyObject *s, PyObject *sep, Py_ssize_t maxsplit)

  戻り値: 新たな参照.
  Unicode 文字列のリストを分割して、 Unicode 文字列からなるリスト を返します。 sep が `NULL` の場合、全ての空白文字を使って 分割を行います。それ以外の場合、指定された文字を使って分割を 行います。最大で maxsplit 個までの分割を行います。 maxsplit が負ならば分割数に制限を設けません。 分割結果のリスト内には分割文字は含みません。

PyObject* `PyUnicode_Splitlines`( | PyObject *s, int keepend)

  戻り値: 新たな参照.
  Unicode 文字列を改行文字で区切り、Unicode 文字列からなるリスト を返します。CRLF は一個の改行文字とみなします。keepend が 0 の場合、分割結果のリスト内に改行文字を含めません。

PyObject* `PyUnicode_Translate`( | PyObject *str, PyObject *table, const char *errors)

  戻り値: 新たな参照.

  文字列に文字変換マップ table を適用して変換し、変換結果を Unicode オブジェクトで返します。

  対応付けを行う table は、 Unicode 序数を表す整数を Unicode 序数を表す整数または `None` に対応付けます。 (`None` の場合にはその文字を削除します)

  対応付けテーブルが提供する必要があるメソッドは `__getitem__()` インタフェースだけです; 従って、辞書や シーケンス型を使ってもうまく動作します。対応付けを行っていない (`LookupError` を起こすような) 文字序数に対しては、 変換は行わず、そのままコピーします。

  errors は codecs で通常使われるのと同じ意味を持ちます。 errors は `NULL` にしてもよく、デフォルトエラー処理の 使用を意味します。

PyObject* `PyUnicode_Join`( | PyObject *separator, PyObject *seq)

  戻り値: 新たな参照.
  指定した separator で文字列からなるシーケンスを連結 (join) し、 連結結果を Unicode 文字列で返します。

int `PyUnicode_Tailmatch`( | PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)

  戻り値: 新たな参照.
  substr が指定された末尾条件 (direction == -1 は 前方一致、 direction ==1 は後方一致) で str[start:end] とマッチする場合に 1 を返し、 それ以外の場合には 0 を返します。 エラーが発生した時は `-1` を返します。

Py_ssize_t `PyUnicode_Find`( | PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)

  str[start:end] 中にsubstr が最初に 出現する場所を返します。このとき指定された検索方向 direction (direction == 1 は順方向検索、 direction == -1 は 逆方向検索) で検索します。戻り値は最初にマッチが見つかった場所の インデクスです; 戻り値 `-1` はマッチが見つからなかったことを 表し、`-2` はエラーが発生して例外情報が設定されていることを 表します。

Py_ssize_t `PyUnicode_Count`( | PyObject *str, PyObject *substr, Py_ssize_t start, Py_ssize_t end)

  `str[start:end]` に substr が重複することなく出現する回数を返します。 エラーが発生した場合には `-1` を返します。

PyObject* `PyUnicode_Replace`( | PyObject *str, PyObject *substr, PyObject *replstr, Py_ssize_t maxcount)

  戻り値: 新たな参照.
  str 中に出現する substr を最大で maxcount 個 replstr に置換し、置換結果を Unicode オブジェクトにして 返します。 maxcount == -1 にすると、全ての substr を置換します。

int `PyUnicode_Compare`( | PyObject *left, PyObject *right)

  二つの文字列を比較して、左引数が右引数より小さい場合、 左右引数が等価の場合、左引数が右引数より大きい場合、について、 それぞれ -1, 0, 1 を返します。

int `PyUnicode_RichCompare`( | PyObject *left, PyObject *right, int op)

  二つのunicode文字列を比較して、下のうちの一つを返します:
  - `NULL` を、例外が発生したときに返します。
  - `Py_True` もしくは `Py_False` を、正しく比較できた時に返します。
  - `Py_NotImplemented` を、leftとrightがのどちらかに対する `PyUnicode_FromObject()` が失敗したときに返します。(原文: in case the type combination is unknown)

  `Py_EQ` と `Py_NE` の比較は、引数からUnicodeへの変換が `UnicodeDecodeError` で失敗した時に、 `UnicodeWarning` を発生する可能性があることに注意してください。

  op に入れられる値は、 `Py_GT`, `Py_GE`, `Py_EQ`, `Py_NE`, `Py_LT`, and `Py_LE` のどれかです。

PyObject* `PyUnicode_Format`( | PyObject *format, PyObject *args)

  戻り値: 新たな参照.
  新たな文字列オブジェクトを format および args から 生成して返します; このメソッドは `format % args` のようなものです。引数 args はタプルでなくてはなりません。

int `PyUnicode_Contains`( | PyObject *container, PyObject *element)

  element が container 内にあるか調べ、その結果に応じて 真または偽を返します。

  element は単要素の Unicode 文字に型強制できなければ なりません。エラーが生じた場合には `-1` を返します。