diff options
author | Inada Naoki <songofacandy@gmail.com> | 2021-05-07 06:58:29 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-07 06:58:29 (GMT) |
commit | 9ad8f109ac037ac088e09dcd2da523322c5caf34 (patch) | |
tree | d125df68405fd1e98f3edf67d9e3c52b679688f5 /Doc | |
parent | 4ebf4a6bfad4afcbab3baf9c0159c7767e2a64c0 (diff) | |
download | cpython-9ad8f109ac037ac088e09dcd2da523322c5caf34.zip cpython-9ad8f109ac037ac088e09dcd2da523322c5caf34.tar.gz cpython-9ad8f109ac037ac088e09dcd2da523322c5caf34.tar.bz2 |
bpo-44029: Remove Py_UNICODE APIs (GH-25881)
Remove deprecated `Py_UNICODE` APIs: `PyUnicode_Encode`,
`PyUnicode_EncodeUTF7`, `PyUnicode_EncodeUTF8`,
`PyUnicode_EncodeUTF16`, `PyUnicode_EncodeUTF32`,
`PyUnicode_EncodeLatin1`, `PyUnicode_EncodeMBCS`,
`PyUnicode_EncodeDecimal`, `PyUnicode_EncodeRawUnicodeEscape`,
`PyUnicode_EncodeCharmap`, `PyUnicode_EncodeUnicodeEscape`,
`PyUnicode_TransformDecimalToASCII`, `PyUnicode_TranslateCharmap`,
`PyUnicodeEncodeError_Create`, `PyUnicodeTranslateError_Create`.
See :pep:`393` and :pep:`624` for reference.
Diffstat (limited to 'Doc')
-rw-r--r-- | Doc/c-api/exceptions.rst | 21 | ||||
-rw-r--r-- | Doc/c-api/unicode.rst | 185 | ||||
-rw-r--r-- | Doc/data/refcounts.dat | 84 |
3 files changed, 0 insertions, 290 deletions
diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst index 21c508d..525a773 100644 --- a/Doc/c-api/exceptions.rst +++ b/Doc/c-api/exceptions.rst @@ -675,27 +675,6 @@ The following functions are used to create and modify Unicode exceptions from C. *object*, *length*, *start*, *end* and *reason*. *encoding* and *reason* are UTF-8 encoded strings. -.. c:function:: PyObject* PyUnicodeEncodeError_Create(const char *encoding, const Py_UNICODE *object, Py_ssize_t length, Py_ssize_t start, Py_ssize_t end, const char *reason) - - Create a :class:`UnicodeEncodeError` object with the attributes *encoding*, - *object*, *length*, *start*, *end* and *reason*. *encoding* and *reason* are - UTF-8 encoded strings. - - .. deprecated:: 3.3 3.11 - - ``Py_UNICODE`` is deprecated since Python 3.3. Please migrate to - ``PyObject_CallFunction(PyExc_UnicodeEncodeError, "sOnns", ...)``. - -.. c:function:: PyObject* PyUnicodeTranslateError_Create(const Py_UNICODE *object, Py_ssize_t length, Py_ssize_t start, Py_ssize_t end, const char *reason) - - Create a :class:`UnicodeTranslateError` object with the attributes *object*, - *length*, *start*, *end* and *reason*. *reason* is a UTF-8 encoded string. - - .. deprecated:: 3.3 3.11 - - ``Py_UNICODE`` is deprecated since Python 3.3. Please migrate to - ``PyObject_CallFunction(PyExc_UnicodeTranslateError, "Onns", ...)``. - .. c:function:: PyObject* PyUnicodeDecodeError_GetEncoding(PyObject *exc) PyObject* PyUnicodeEncodeError_GetEncoding(PyObject *exc) diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst index 8d4eef8..8322d3d 100644 --- a/Doc/c-api/unicode.rst +++ b/Doc/c-api/unicode.rst @@ -719,17 +719,6 @@ Extension modules can continue using them, as they will not be removed in Python :c:func:`PyUnicode_ReadChar` or similar new APIs. -.. c:function:: PyObject* PyUnicode_TransformDecimalToASCII(Py_UNICODE *s, Py_ssize_t size) - - Create a Unicode object by replacing all decimal digits in - :c:type:`Py_UNICODE` buffer of the given *size* by ASCII digits 0--9 - according to their decimal value. Return ``NULL`` if an exception occurs. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`Py_UNICODE_TODECIMAL`. - - .. c:function:: Py_UNICODE* PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size) Like :c:func:`PyUnicode_AsUnicode`, but also saves the :c:func:`Py_UNICODE` @@ -1038,20 +1027,6 @@ These are the generic codec APIs: the codec. -.. c:function:: PyObject* PyUnicode_Encode(const Py_UNICODE *s, Py_ssize_t size, \ - const char *encoding, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer *s* of the given *size* and return a Python - bytes object. *encoding* and *errors* have the same meaning as the - parameters of the same name in the Unicode :meth:`~str.encode` method. The codec - to be used is looked up using the Python codec registry. Return ``NULL`` if an - exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsEncodedString`. - - UTF-8 Codecs """""""""""" @@ -1114,18 +1089,6 @@ These are the UTF-8 codec APIs: The return type is now ``const char *`` rather of ``char *``. -.. c:function:: PyObject* PyUnicode_EncodeUTF8(const Py_UNICODE *s, Py_ssize_t size, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer *s* of the given *size* using UTF-8 and - return a Python bytes object. Return ``NULL`` if an exception was raised by - the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUTF8String`, :c:func:`PyUnicode_AsUTF8AndSize` or - :c:func:`PyUnicode_AsEncodedString`. - - UTF-32 Codecs """"""""""""" @@ -1176,29 +1139,6 @@ These are the UTF-32 codec APIs: Return ``NULL`` if an exception was raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeUTF32(const Py_UNICODE *s, Py_ssize_t size, \ - const char *errors, int byteorder) - - Return a Python bytes object holding the UTF-32 encoded value of the Unicode - data in *s*. Output is written according to the following byte order:: - - byteorder == -1: little endian - byteorder == 0: native byte order (writes a BOM mark) - byteorder == 1: big endian - - If byteorder is ``0``, the output string will always start with the Unicode BOM - mark (U+FEFF). In the other two modes, no BOM mark is prepended. - - If ``Py_UNICODE_WIDE`` is not defined, surrogate pairs will be output - as a single code point. - - Return ``NULL`` if an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUTF32String` or :c:func:`PyUnicode_AsEncodedString`. - - UTF-16 Codecs """"""""""""" @@ -1250,30 +1190,6 @@ These are the UTF-16 codec APIs: Return ``NULL`` if an exception was raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeUTF16(const Py_UNICODE *s, Py_ssize_t size, \ - const char *errors, int byteorder) - - Return a Python bytes object holding the UTF-16 encoded value of the Unicode - data in *s*. Output is written according to the following byte order:: - - byteorder == -1: little endian - byteorder == 0: native byte order (writes a BOM mark) - byteorder == 1: big endian - - If byteorder is ``0``, the output string will always start with the Unicode BOM - mark (U+FEFF). In the other two modes, no BOM mark is prepended. - - If ``Py_UNICODE_WIDE`` is defined, a single :c:type:`Py_UNICODE` value may get - represented as a surrogate pair. If it is not defined, each :c:type:`Py_UNICODE` - values is interpreted as a UCS-2 character. - - Return ``NULL`` if an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUTF16String` or :c:func:`PyUnicode_AsEncodedString`. - - UTF-7 Codecs """""""""""" @@ -1295,23 +1211,6 @@ These are the UTF-7 codec APIs: bytes that have been decoded will be stored in *consumed*. -.. c:function:: PyObject* PyUnicode_EncodeUTF7(const Py_UNICODE *s, Py_ssize_t size, \ - int base64SetO, int base64WhiteSpace, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer of the given size using UTF-7 and - return a Python bytes object. Return ``NULL`` if an exception was raised by - the codec. - - If *base64SetO* is nonzero, "Set O" (punctuation that has no otherwise - special meaning) will be encoded in base-64. If *base64WhiteSpace* is - nonzero, whitespace will be encoded in base-64. Both are set to zero for the - Python "utf-7" codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsEncodedString`. - - Unicode-Escape Codecs """"""""""""""""""""" @@ -1332,16 +1231,6 @@ These are the "Unicode Escape" codec APIs: raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Unicode-Escape and - return a bytes object. Return ``NULL`` if an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUnicodeEscapeString`. - - Raw-Unicode-Escape Codecs """"""""""""""""""""""""" @@ -1362,18 +1251,6 @@ These are the "Raw Unicode Escape" codec APIs: was raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeRawUnicodeEscape(const Py_UNICODE *s, \ - Py_ssize_t size) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Raw-Unicode-Escape - and return a bytes object. Return ``NULL`` if an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsRawUnicodeEscapeString` or - :c:func:`PyUnicode_AsEncodedString`. - - Latin-1 Codecs """""""""""""" @@ -1394,18 +1271,6 @@ ordinals and only these are accepted by the codecs during encoding. raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeLatin1(const Py_UNICODE *s, Py_ssize_t size, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Latin-1 and - return a Python bytes object. Return ``NULL`` if an exception was raised by - the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsLatin1String` or - :c:func:`PyUnicode_AsEncodedString`. - - ASCII Codecs """""""""""" @@ -1426,18 +1291,6 @@ codes generate errors. raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeASCII(const Py_UNICODE *s, Py_ssize_t size, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using ASCII and - return a Python bytes object. Return ``NULL`` if an exception was raised by - the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsASCIIString` or - :c:func:`PyUnicode_AsEncodedString`. - - Character Map Codecs """""""""""""""""""" @@ -1477,19 +1330,6 @@ These are the mapping codec APIs: ``None`` are treated as "undefined mapping" and cause an error. -.. c:function:: PyObject* PyUnicode_EncodeCharmap(const Py_UNICODE *s, Py_ssize_t size, \ - PyObject *mapping, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using the given - *mapping* object and return the result as a bytes object. Return ``NULL`` if - an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsCharmapString` or - :c:func:`PyUnicode_AsEncodedString`. - - The following codec API is special in that maps Unicode to Unicode. .. c:function:: PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors) @@ -1509,19 +1349,6 @@ The following codec API is special in that maps Unicode to Unicode. use the default error handling. -.. c:function:: PyObject* PyUnicode_TranslateCharmap(const Py_UNICODE *s, Py_ssize_t size, \ - PyObject *mapping, const char *errors) - - Translate a :c:type:`Py_UNICODE` buffer of the given *size* by applying a - character *mapping* table to it and return the resulting Unicode object. - Return ``NULL`` when an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_Translate`. or :ref:`generic codec based API - <codec-registry>` - - MBCS codecs for Windows """"""""""""""""""""""" @@ -1561,18 +1388,6 @@ the user settings on the machine running the codec. .. versionadded:: 3.3 -.. c:function:: PyObject* PyUnicode_EncodeMBCS(const Py_UNICODE *s, Py_ssize_t size, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using MBCS and return - a Python bytes object. Return ``NULL`` if an exception was raised by the - codec. - - .. deprecated-removed:: 3.3 4.0 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsMBCSString`, :c:func:`PyUnicode_EncodeCodePage` or - :c:func:`PyUnicode_AsEncodedString`. - - Methods & Slots """"""""""""""" diff --git a/Doc/data/refcounts.dat b/Doc/data/refcounts.dat index 505f120..f3aacb8 100644 --- a/Doc/data/refcounts.dat +++ b/Doc/data/refcounts.dat @@ -2427,10 +2427,6 @@ PyUnicode_FromUnicode:Py_ssize_t:size:: PyUnicode_AsUnicode:Py_UNICODE*::: PyUnicode_AsUnicode:PyObject*:unicode:0: -PyUnicode_TransformDecimalToASCII:PyObject*::+1: -PyUnicode_TransformDecimalToASCII:Py_UNICODE*:s:: -PyUnicode_TransformDecimalToASCII:Py_ssize_t:size:: - PyUnicode_AsUnicodeAndSize:Py_UNICODE*::: PyUnicode_AsUnicodeAndSize:PyObject*:unicode:0: PyUnicode_AsUnicodeAndSize:Py_ssize_t*:size:: @@ -2478,12 +2474,6 @@ PyUnicode_DecodeUTF8Stateful:Py_ssize_t:size:: PyUnicode_DecodeUTF8Stateful:const char*:errors:: PyUnicode_DecodeUTF8Stateful:Py_ssize_t*:consumed:: -PyUnicode_Encode:PyObject*::+1: -PyUnicode_Encode:const Py_UNICODE*:s:: -PyUnicode_Encode:Py_ssize_t:size:: -PyUnicode_Encode:const char*:encoding:: -PyUnicode_Encode:const char*:errors:: - PyUnicode_AsEncodedString:PyObject*::+1: PyUnicode_AsEncodedString:PyObject*:unicode:0: PyUnicode_AsEncodedString:const char*:encoding:: @@ -2500,23 +2490,11 @@ PyUnicode_DecodeUTF7Stateful:Py_ssize_t:size:: PyUnicode_DecodeUTF7Stateful:const char*:errors:: PyUnicode_DecodeUTF7Stateful:Py_ssize_t*:consumed:: -PyUnicode_EncodeUTF7:PyObject*::+1: -PyUnicode_EncodeUTF7:const Py_UNICODE*:s:: -PyUnicode_EncodeUTF7:Py_ssize_t:size:: -PyUnicode_EncodeUTF7:int:base64SetO:: -PyUnicode_EncodeUTF7:int:base64WhiteSpace:: -PyUnicode_EncodeUTF7:const char*:errors:: - PyUnicode_DecodeUTF8:PyObject*::+1: PyUnicode_DecodeUTF8:const char*:s:: PyUnicode_DecodeUTF8:Py_ssize_t:size:: PyUnicode_DecodeUTF8:const char*:errors:: -PyUnicode_EncodeUTF8:PyObject*::+1: -PyUnicode_EncodeUTF8:const Py_UNICODE*:s:: -PyUnicode_EncodeUTF8:Py_ssize_t:size:: -PyUnicode_EncodeUTF8:const char*:errors:: - PyUnicode_AsUTF8String:PyObject*::+1: PyUnicode_AsUTF8String:PyObject*:unicode:0: @@ -2533,12 +2511,6 @@ PyUnicode_DecodeUTF16:Py_ssize_t:size:: PyUnicode_DecodeUTF16:const char*:errors:: PyUnicode_DecodeUTF16:int*:byteorder:: -PyUnicode_EncodeUTF16:PyObject*::+1: -PyUnicode_EncodeUTF16:const Py_UNICODE*:s:: -PyUnicode_EncodeUTF16:Py_ssize_t:size:: -PyUnicode_EncodeUTF16:const char*:errors:: -PyUnicode_EncodeUTF16:int:byteorder:: - PyUnicode_AsUTF16String:PyObject*::+1: PyUnicode_AsUTF16String:PyObject*:unicode:0: @@ -2558,21 +2530,11 @@ PyUnicode_DecodeUTF32Stateful:Py_ssize_t*:consumed:: PyUnicode_AsUTF32String:PyObject*::+1: PyUnicode_AsUTF32String:PyObject*:unicode:0: -PyUnicode_EncodeUTF32:PyObject*::+1: -PyUnicode_EncodeUTF32:const Py_UNICODE*:s:: -PyUnicode_EncodeUTF32:Py_ssize_t:size:: -PyUnicode_EncodeUTF32:const char*:errors:: -PyUnicode_EncodeUTF32:int:byteorder:: - PyUnicode_DecodeUnicodeEscape:PyObject*::+1: PyUnicode_DecodeUnicodeEscape:const char*:s:: PyUnicode_DecodeUnicodeEscape:Py_ssize_t:size:: PyUnicode_DecodeUnicodeEscape:const char*:errors:: -PyUnicode_EncodeUnicodeEscape:PyObject*::+1: -PyUnicode_EncodeUnicodeEscape:const Py_UNICODE*:s:: -PyUnicode_EncodeUnicodeEscape:Py_ssize_t:size:: - PyUnicode_AsUnicodeEscapeString:PyObject*::+1: PyUnicode_AsUnicodeEscapeString:PyObject*:unicode:0: @@ -2581,10 +2543,6 @@ PyUnicode_DecodeRawUnicodeEscape:const char*:s:: PyUnicode_DecodeRawUnicodeEscape:Py_ssize_t:size:: PyUnicode_DecodeRawUnicodeEscape:const char*:errors:: -PyUnicode_EncodeRawUnicodeEscape:PyObject*::+1: -PyUnicode_EncodeRawUnicodeEscape:const Py_UNICODE*:s:: -PyUnicode_EncodeRawUnicodeEscape:Py_ssize_t:size:: - PyUnicode_AsRawUnicodeEscapeString:PyObject*::+1: PyUnicode_AsRawUnicodeEscapeString:PyObject*:unicode:0: @@ -2593,11 +2551,6 @@ PyUnicode_DecodeLatin1:const char*:s:: PyUnicode_DecodeLatin1:Py_ssize_t:size:: PyUnicode_DecodeLatin1:const char*:errors:: -PyUnicode_EncodeLatin1:PyObject*::+1: -PyUnicode_EncodeLatin1:const Py_UNICODE*:s:: -PyUnicode_EncodeLatin1:Py_ssize_t:size:: -PyUnicode_EncodeLatin1:const char*:errors:: - PyUnicode_AsLatin1String:PyObject*::+1: PyUnicode_AsLatin1String:PyObject*:unicode:0: @@ -2606,11 +2559,6 @@ PyUnicode_DecodeASCII:const char*:s:: PyUnicode_DecodeASCII:Py_ssize_t:size:: PyUnicode_DecodeASCII:const char*:errors:: -PyUnicode_EncodeASCII:PyObject*::+1: -PyUnicode_EncodeASCII:const Py_UNICODE*:s:: -PyUnicode_EncodeASCII:Py_ssize_t:size:: -PyUnicode_EncodeASCII:const char*:errors:: - PyUnicode_AsASCIIString:PyObject*::+1: PyUnicode_AsASCIIString:PyObject*:unicode:0: @@ -2620,22 +2568,10 @@ PyUnicode_DecodeCharmap:Py_ssize_t:size:: PyUnicode_DecodeCharmap:PyObject*:mapping:0: PyUnicode_DecodeCharmap:const char*:errors:: -PyUnicode_EncodeCharmap:PyObject*::+1: -PyUnicode_EncodeCharmap:const Py_UNICODE*:s:: -PyUnicode_EncodeCharmap:Py_ssize_t:size:: -PyUnicode_EncodeCharmap:PyObject*:mapping:0: -PyUnicode_EncodeCharmap:const char*:errors:: - PyUnicode_AsCharmapString:PyObject*::+1: PyUnicode_AsCharmapString:PyObject*:unicode:0: PyUnicode_AsCharmapString:PyObject*:mapping:0: -PyUnicode_TranslateCharmap:PyObject*::+1: -PyUnicode_TranslateCharmap:const Py_UNICODE*:s:: -PyUnicode_TranslateCharmap:Py_ssize_t:size:: -PyUnicode_TranslateCharmap:PyObject*:mapping:0: -PyUnicode_TranslateCharmap:const char*:errors:: - PyUnicode_DecodeMBCS:PyObject*::+1: PyUnicode_DecodeMBCS:const char*:s:: PyUnicode_DecodeMBCS:Py_ssize_t:size:: @@ -2652,11 +2588,6 @@ PyUnicode_EncodeCodePage:int:code_page:: PyUnicode_EncodeCodePage:PyObject*:unicode:0: PyUnicode_EncodeCodePage:const char*:errors:: -PyUnicode_EncodeMBCS:PyObject*::+1: -PyUnicode_EncodeMBCS:const Py_UNICODE*:s:: -PyUnicode_EncodeMBCS:Py_ssize_t:size:: -PyUnicode_EncodeMBCS:const char*:errors:: - PyUnicode_AsMBCSString:PyObject*::+1: PyUnicode_AsMBCSString:PyObject*:unicode:0: @@ -2891,21 +2822,6 @@ PyUnicodeDecodeError_SetStart:int::: PyUnicodeDecodeError_SetStart:PyObject*:exc:0: PyUnicodeDecodeError_SetStart:Py_ssize_t:start:: -PyUnicodeEncodeError_Create:PyObject*::+1: -PyUnicodeEncodeError_Create:const char*:encoding:: -PyUnicodeEncodeError_Create:const Py_UNICODE*:object:: -PyUnicodeEncodeError_Create:Py_ssize_t:length:: -PyUnicodeEncodeError_Create:Py_ssize_t:start:: -PyUnicodeEncodeError_Create:Py_ssize_t:end:: -PyUnicodeEncodeError_Create:const char*:reason:: - -PyUnicodeTranslateError_Create:PyObject*::+1: -PyUnicodeTranslateError_Create:const Py_UNICODE*:object:: -PyUnicodeTranslateError_Create:Py_ssize_t:length:: -PyUnicodeTranslateError_Create:Py_ssize_t:start:: -PyUnicodeTranslateError_Create:Py_ssize_t:end:: -PyUnicodeTranslateError_Create:const char*:reason:: - PyWeakref_Check:int::: PyWeakref_Check:PyObject*:ob:: |