17db96d56Sopenharmony_ci#ifndef Py_UNICODEOBJECT_H
27db96d56Sopenharmony_ci#define Py_UNICODEOBJECT_H
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci#include <stdarg.h>               // va_list
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ci/*
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ciUnicode implementation based on original code by Fredrik Lundh,
97db96d56Sopenharmony_cimodified by Marc-Andre Lemburg (mal@lemburg.com) according to the
107db96d56Sopenharmony_ciUnicode Integration Proposal. (See
117db96d56Sopenharmony_cihttp://www.egenix.com/files/python/unicode-proposal.txt).
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciCopyright (c) Corporation for National Research Initiatives.
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci Original header:
177db96d56Sopenharmony_ci --------------------------------------------------------------------
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci * Yet another Unicode string type for Python.  This type supports the
207db96d56Sopenharmony_ci * 16-bit Basic Multilingual Plane (BMP) only.
217db96d56Sopenharmony_ci *
227db96d56Sopenharmony_ci * Written by Fredrik Lundh, January 1999.
237db96d56Sopenharmony_ci *
247db96d56Sopenharmony_ci * Copyright (c) 1999 by Secret Labs AB.
257db96d56Sopenharmony_ci * Copyright (c) 1999 by Fredrik Lundh.
267db96d56Sopenharmony_ci *
277db96d56Sopenharmony_ci * fredrik@pythonware.com
287db96d56Sopenharmony_ci * http://www.pythonware.com
297db96d56Sopenharmony_ci *
307db96d56Sopenharmony_ci * --------------------------------------------------------------------
317db96d56Sopenharmony_ci * This Unicode String Type is
327db96d56Sopenharmony_ci *
337db96d56Sopenharmony_ci * Copyright (c) 1999 by Secret Labs AB
347db96d56Sopenharmony_ci * Copyright (c) 1999 by Fredrik Lundh
357db96d56Sopenharmony_ci *
367db96d56Sopenharmony_ci * By obtaining, using, and/or copying this software and/or its
377db96d56Sopenharmony_ci * associated documentation, you agree that you have read, understood,
387db96d56Sopenharmony_ci * and will comply with the following terms and conditions:
397db96d56Sopenharmony_ci *
407db96d56Sopenharmony_ci * Permission to use, copy, modify, and distribute this software and its
417db96d56Sopenharmony_ci * associated documentation for any purpose and without fee is hereby
427db96d56Sopenharmony_ci * granted, provided that the above copyright notice appears in all
437db96d56Sopenharmony_ci * copies, and that both that copyright notice and this permission notice
447db96d56Sopenharmony_ci * appear in supporting documentation, and that the name of Secret Labs
457db96d56Sopenharmony_ci * AB or the author not be used in advertising or publicity pertaining to
467db96d56Sopenharmony_ci * distribution of the software without specific, written prior
477db96d56Sopenharmony_ci * permission.
487db96d56Sopenharmony_ci *
497db96d56Sopenharmony_ci * SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO
507db96d56Sopenharmony_ci * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
517db96d56Sopenharmony_ci * FITNESS.  IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR
527db96d56Sopenharmony_ci * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
537db96d56Sopenharmony_ci * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
547db96d56Sopenharmony_ci * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
557db96d56Sopenharmony_ci * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
567db96d56Sopenharmony_ci * -------------------------------------------------------------------- */
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci#include <ctype.h>
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci/* === Internal API ======================================================= */
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci/* --- Internal Unicode Format -------------------------------------------- */
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci/* Python 3.x requires unicode */
657db96d56Sopenharmony_ci#define Py_USING_UNICODE
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci#ifndef SIZEOF_WCHAR_T
687db96d56Sopenharmony_ci#error Must define SIZEOF_WCHAR_T
697db96d56Sopenharmony_ci#endif
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci#define Py_UNICODE_SIZE SIZEOF_WCHAR_T
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci/* If wchar_t can be used for UCS-4 storage, set Py_UNICODE_WIDE.
747db96d56Sopenharmony_ci   Otherwise, Unicode strings are stored as UCS-2 (with limited support
757db96d56Sopenharmony_ci   for UTF-16) */
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci#if Py_UNICODE_SIZE >= 4
787db96d56Sopenharmony_ci#define Py_UNICODE_WIDE
797db96d56Sopenharmony_ci#endif
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci/* Set these flags if the platform has "wchar.h" and the
827db96d56Sopenharmony_ci   wchar_t type is a 16-bit unsigned type */
837db96d56Sopenharmony_ci/* #define HAVE_WCHAR_H */
847db96d56Sopenharmony_ci/* #define HAVE_USABLE_WCHAR_T */
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci/* If the compiler provides a wchar_t type we try to support it
877db96d56Sopenharmony_ci   through the interface functions PyUnicode_FromWideChar(),
887db96d56Sopenharmony_ci   PyUnicode_AsWideChar() and PyUnicode_AsWideCharString(). */
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci#ifdef HAVE_USABLE_WCHAR_T
917db96d56Sopenharmony_ci# ifndef HAVE_WCHAR_H
927db96d56Sopenharmony_ci#  define HAVE_WCHAR_H
937db96d56Sopenharmony_ci# endif
947db96d56Sopenharmony_ci#endif
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ci#ifdef HAVE_WCHAR_H
977db96d56Sopenharmony_ci#  include <wchar.h>
987db96d56Sopenharmony_ci#endif
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci/* Py_UCS4 and Py_UCS2 are typedefs for the respective
1017db96d56Sopenharmony_ci   unicode representations. */
1027db96d56Sopenharmony_citypedef uint32_t Py_UCS4;
1037db96d56Sopenharmony_citypedef uint16_t Py_UCS2;
1047db96d56Sopenharmony_citypedef uint8_t Py_UCS1;
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci#ifdef __cplusplus
1077db96d56Sopenharmony_ciextern "C" {
1087db96d56Sopenharmony_ci#endif
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) PyUnicode_Type;
1127db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) PyUnicodeIter_Type;
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci#define PyUnicode_Check(op) \
1157db96d56Sopenharmony_ci    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
1167db96d56Sopenharmony_ci#define PyUnicode_CheckExact(op) Py_IS_TYPE(op, &PyUnicode_Type)
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci/* --- Constants ---------------------------------------------------------- */
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci/* This Unicode character will be used as replacement character during
1217db96d56Sopenharmony_ci   decoding if the errors argument is set to "replace". Note: the
1227db96d56Sopenharmony_ci   Unicode character U+FFFD is the official REPLACEMENT CHARACTER in
1237db96d56Sopenharmony_ci   Unicode 3.0. */
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci#define Py_UNICODE_REPLACEMENT_CHARACTER ((Py_UCS4) 0xFFFD)
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ci/* === Public API ========================================================= */
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci/* Similar to PyUnicode_FromUnicode(), but u points to UTF-8 encoded bytes */
1307db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_FromStringAndSize(
1317db96d56Sopenharmony_ci    const char *u,             /* UTF-8 encoded string */
1327db96d56Sopenharmony_ci    Py_ssize_t size            /* size of buffer */
1337db96d56Sopenharmony_ci    );
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci/* Similar to PyUnicode_FromUnicode(), but u points to null-terminated
1367db96d56Sopenharmony_ci   UTF-8 encoded bytes.  The size is determined with strlen(). */
1377db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_FromString(
1387db96d56Sopenharmony_ci    const char *u              /* UTF-8 encoded string */
1397db96d56Sopenharmony_ci    );
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
1427db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_Substring(
1437db96d56Sopenharmony_ci    PyObject *str,
1447db96d56Sopenharmony_ci    Py_ssize_t start,
1457db96d56Sopenharmony_ci    Py_ssize_t end);
1467db96d56Sopenharmony_ci#endif
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
1497db96d56Sopenharmony_ci/* Copy the string into a UCS4 buffer including the null character if copy_null
1507db96d56Sopenharmony_ci   is set. Return NULL and raise an exception on error. Raise a SystemError if
1517db96d56Sopenharmony_ci   the buffer is smaller than the string. Return buffer on success.
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ci   buflen is the length of the buffer in (Py_UCS4) characters. */
1547db96d56Sopenharmony_ciPyAPI_FUNC(Py_UCS4*) PyUnicode_AsUCS4(
1557db96d56Sopenharmony_ci    PyObject *unicode,
1567db96d56Sopenharmony_ci    Py_UCS4* buffer,
1577db96d56Sopenharmony_ci    Py_ssize_t buflen,
1587db96d56Sopenharmony_ci    int copy_null);
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci/* Copy the string into a UCS4 buffer. A new buffer is allocated using
1617db96d56Sopenharmony_ci * PyMem_Malloc; if this fails, NULL is returned with a memory error
1627db96d56Sopenharmony_ci   exception set. */
1637db96d56Sopenharmony_ciPyAPI_FUNC(Py_UCS4*) PyUnicode_AsUCS4Copy(PyObject *unicode);
1647db96d56Sopenharmony_ci#endif
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
1677db96d56Sopenharmony_ci/* Get the length of the Unicode object. */
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ciPyAPI_FUNC(Py_ssize_t) PyUnicode_GetLength(
1707db96d56Sopenharmony_ci    PyObject *unicode
1717db96d56Sopenharmony_ci);
1727db96d56Sopenharmony_ci#endif
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ci/* Get the number of Py_UNICODE units in the
1757db96d56Sopenharmony_ci   string representation. */
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ciPy_DEPRECATED(3.3) PyAPI_FUNC(Py_ssize_t) PyUnicode_GetSize(
1787db96d56Sopenharmony_ci    PyObject *unicode           /* Unicode object */
1797db96d56Sopenharmony_ci    );
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
1827db96d56Sopenharmony_ci/* Read a character from the string. */
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ciPyAPI_FUNC(Py_UCS4) PyUnicode_ReadChar(
1857db96d56Sopenharmony_ci    PyObject *unicode,
1867db96d56Sopenharmony_ci    Py_ssize_t index
1877db96d56Sopenharmony_ci    );
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci/* Write a character to the string. The string must have been created through
1907db96d56Sopenharmony_ci   PyUnicode_New, must not be shared, and must not have been hashed yet.
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci   Return 0 on success, -1 on error. */
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ciPyAPI_FUNC(int) PyUnicode_WriteChar(
1957db96d56Sopenharmony_ci    PyObject *unicode,
1967db96d56Sopenharmony_ci    Py_ssize_t index,
1977db96d56Sopenharmony_ci    Py_UCS4 character
1987db96d56Sopenharmony_ci    );
1997db96d56Sopenharmony_ci#endif
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci/* Resize a Unicode object. The length is the number of characters, except
2027db96d56Sopenharmony_ci   if the kind of the string is PyUnicode_WCHAR_KIND: in this case, the length
2037db96d56Sopenharmony_ci   is the number of Py_UNICODE characters.
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci   *unicode is modified to point to the new (resized) object and 0
2067db96d56Sopenharmony_ci   returned on success.
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci   Try to resize the string in place (which is usually faster than allocating
2097db96d56Sopenharmony_ci   a new string and copy characters), or create a new string.
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci   Error handling is implemented as follows: an exception is set, -1
2127db96d56Sopenharmony_ci   is returned and *unicode left untouched.
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci   WARNING: The function doesn't check string content, the result may not be a
2157db96d56Sopenharmony_ci            string in canonical representation. */
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ciPyAPI_FUNC(int) PyUnicode_Resize(
2187db96d56Sopenharmony_ci    PyObject **unicode,         /* Pointer to the Unicode object */
2197db96d56Sopenharmony_ci    Py_ssize_t length           /* New length */
2207db96d56Sopenharmony_ci    );
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci/* Decode obj to a Unicode object.
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_ci   bytes, bytearray and other bytes-like objects are decoded according to the
2257db96d56Sopenharmony_ci   given encoding and error handler. The encoding and error handler can be
2267db96d56Sopenharmony_ci   NULL to have the interface use UTF-8 and "strict".
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_ci   All other objects (including Unicode objects) raise an exception.
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_ci   The API returns NULL in case of an error. The caller is responsible
2317db96d56Sopenharmony_ci   for decref'ing the returned objects.
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci*/
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_FromEncodedObject(
2367db96d56Sopenharmony_ci    PyObject *obj,              /* Object */
2377db96d56Sopenharmony_ci    const char *encoding,       /* encoding */
2387db96d56Sopenharmony_ci    const char *errors          /* error handling */
2397db96d56Sopenharmony_ci    );
2407db96d56Sopenharmony_ci
2417db96d56Sopenharmony_ci/* Copy an instance of a Unicode subtype to a new true Unicode object if
2427db96d56Sopenharmony_ci   necessary. If obj is already a true Unicode object (not a subtype), return
2437db96d56Sopenharmony_ci   the reference with *incremented* refcount.
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci   The API returns NULL in case of an error. The caller is responsible
2467db96d56Sopenharmony_ci   for decref'ing the returned objects.
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci*/
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_FromObject(
2517db96d56Sopenharmony_ci    PyObject *obj      /* Object */
2527db96d56Sopenharmony_ci    );
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyUnicode_FromFormatV(
2557db96d56Sopenharmony_ci    const char *format,   /* ASCII-encoded string  */
2567db96d56Sopenharmony_ci    va_list vargs
2577db96d56Sopenharmony_ci    );
2587db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyUnicode_FromFormat(
2597db96d56Sopenharmony_ci    const char *format,   /* ASCII-encoded string  */
2607db96d56Sopenharmony_ci    ...
2617db96d56Sopenharmony_ci    );
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_ciPyAPI_FUNC(void) PyUnicode_InternInPlace(PyObject **);
2647db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyUnicode_InternFromString(
2657db96d56Sopenharmony_ci    const char *u              /* UTF-8 encoded string */
2667db96d56Sopenharmony_ci    );
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci// PyUnicode_InternImmortal() is deprecated since Python 3.10
2697db96d56Sopenharmony_ci// and will be removed in Python 3.12. Use PyUnicode_InternInPlace() instead.
2707db96d56Sopenharmony_ciPy_DEPRECATED(3.10) PyAPI_FUNC(void) PyUnicode_InternImmortal(PyObject **);
2717db96d56Sopenharmony_ci
2727db96d56Sopenharmony_ci/* --- wchar_t support for platforms which support it --------------------- */
2737db96d56Sopenharmony_ci
2747db96d56Sopenharmony_ci#ifdef HAVE_WCHAR_H
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci/* Create a Unicode Object from the wchar_t buffer w of the given
2777db96d56Sopenharmony_ci   size.
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci   The buffer is copied into the new object. */
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_FromWideChar(
2827db96d56Sopenharmony_ci    const wchar_t *w,           /* wchar_t buffer */
2837db96d56Sopenharmony_ci    Py_ssize_t size             /* size of buffer */
2847db96d56Sopenharmony_ci    );
2857db96d56Sopenharmony_ci
2867db96d56Sopenharmony_ci/* Copies the Unicode Object contents into the wchar_t buffer w.  At
2877db96d56Sopenharmony_ci   most size wchar_t characters are copied.
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci   Note that the resulting wchar_t string may or may not be
2907db96d56Sopenharmony_ci   0-terminated.  It is the responsibility of the caller to make sure
2917db96d56Sopenharmony_ci   that the wchar_t string is 0-terminated in case this is required by
2927db96d56Sopenharmony_ci   the application.
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ci   Returns the number of wchar_t characters copied (excluding a
2957db96d56Sopenharmony_ci   possibly trailing 0-termination character) or -1 in case of an
2967db96d56Sopenharmony_ci   error. */
2977db96d56Sopenharmony_ci
2987db96d56Sopenharmony_ciPyAPI_FUNC(Py_ssize_t) PyUnicode_AsWideChar(
2997db96d56Sopenharmony_ci    PyObject *unicode,          /* Unicode object */
3007db96d56Sopenharmony_ci    wchar_t *w,                 /* wchar_t buffer */
3017db96d56Sopenharmony_ci    Py_ssize_t size             /* size of buffer */
3027db96d56Sopenharmony_ci    );
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci/* Convert the Unicode object to a wide character string. The output string
3057db96d56Sopenharmony_ci   always ends with a nul character. If size is not NULL, write the number of
3067db96d56Sopenharmony_ci   wide characters (excluding the null character) into *size.
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci   Returns a buffer allocated by PyMem_Malloc() (use PyMem_Free() to free it)
3097db96d56Sopenharmony_ci   on success. On error, returns NULL, *size is undefined and raises a
3107db96d56Sopenharmony_ci   MemoryError. */
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ciPyAPI_FUNC(wchar_t*) PyUnicode_AsWideCharString(
3137db96d56Sopenharmony_ci    PyObject *unicode,          /* Unicode object */
3147db96d56Sopenharmony_ci    Py_ssize_t *size            /* number of characters of the result */
3157db96d56Sopenharmony_ci    );
3167db96d56Sopenharmony_ci
3177db96d56Sopenharmony_ci#endif
3187db96d56Sopenharmony_ci
3197db96d56Sopenharmony_ci/* --- Unicode ordinals --------------------------------------------------- */
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci/* Create a Unicode Object from the given Unicode code point ordinal.
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ci   The ordinal must be in range(0x110000). A ValueError is
3247db96d56Sopenharmony_ci   raised in case it is not.
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ci*/
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal);
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ci/* === Builtin Codecs =====================================================
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci   Many of these APIs take two arguments encoding and errors. These
3337db96d56Sopenharmony_ci   parameters encoding and errors have the same semantics as the ones
3347db96d56Sopenharmony_ci   of the builtin str() API.
3357db96d56Sopenharmony_ci
3367db96d56Sopenharmony_ci   Setting encoding to NULL causes the default encoding (UTF-8) to be used.
3377db96d56Sopenharmony_ci
3387db96d56Sopenharmony_ci   Error handling is set by errors which may also be set to NULL
3397db96d56Sopenharmony_ci   meaning to use the default handling defined for the codec. Default
3407db96d56Sopenharmony_ci   error handling for all builtin codecs is "strict" (ValueErrors are
3417db96d56Sopenharmony_ci   raised).
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci   The codecs all use a similar interface. Only deviation from the
3447db96d56Sopenharmony_ci   generic ones are documented.
3457db96d56Sopenharmony_ci
3467db96d56Sopenharmony_ci*/
3477db96d56Sopenharmony_ci
3487db96d56Sopenharmony_ci/* --- Manage the default encoding ---------------------------------------- */
3497db96d56Sopenharmony_ci
3507db96d56Sopenharmony_ci/* Returns "utf-8".  */
3517db96d56Sopenharmony_ciPyAPI_FUNC(const char*) PyUnicode_GetDefaultEncoding(void);
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ci/* --- Generic Codecs ----------------------------------------------------- */
3547db96d56Sopenharmony_ci
3557db96d56Sopenharmony_ci/* Create a Unicode object by decoding the encoded string s of the
3567db96d56Sopenharmony_ci   given size. */
3577db96d56Sopenharmony_ci
3587db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_Decode(
3597db96d56Sopenharmony_ci    const char *s,              /* encoded string */
3607db96d56Sopenharmony_ci    Py_ssize_t size,            /* size of buffer */
3617db96d56Sopenharmony_ci    const char *encoding,       /* encoding */
3627db96d56Sopenharmony_ci    const char *errors          /* error handling */
3637db96d56Sopenharmony_ci    );
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci/* Decode a Unicode object unicode and return the result as Python
3667db96d56Sopenharmony_ci   object.
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci   This API is DEPRECATED. The only supported standard encoding is rot13.
3697db96d56Sopenharmony_ci   Use PyCodec_Decode() to decode with rot13 and non-standard codecs
3707db96d56Sopenharmony_ci   that decode from str. */
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ciPy_DEPRECATED(3.6) PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedObject(
3737db96d56Sopenharmony_ci    PyObject *unicode,          /* Unicode object */
3747db96d56Sopenharmony_ci    const char *encoding,       /* encoding */
3757db96d56Sopenharmony_ci    const char *errors          /* error handling */
3767db96d56Sopenharmony_ci    );
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ci/* Decode a Unicode object unicode and return the result as Unicode
3797db96d56Sopenharmony_ci   object.
3807db96d56Sopenharmony_ci
3817db96d56Sopenharmony_ci   This API is DEPRECATED. The only supported standard encoding is rot13.
3827db96d56Sopenharmony_ci   Use PyCodec_Decode() to decode with rot13 and non-standard codecs
3837db96d56Sopenharmony_ci   that decode from str to str. */
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ciPy_DEPRECATED(3.6) PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedUnicode(
3867db96d56Sopenharmony_ci    PyObject *unicode,          /* Unicode object */
3877db96d56Sopenharmony_ci    const char *encoding,       /* encoding */
3887db96d56Sopenharmony_ci    const char *errors          /* error handling */
3897db96d56Sopenharmony_ci    );
3907db96d56Sopenharmony_ci
3917db96d56Sopenharmony_ci/* Encodes a Unicode object and returns the result as Python
3927db96d56Sopenharmony_ci   object.
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_ci   This API is DEPRECATED.  It is superseded by PyUnicode_AsEncodedString()
3957db96d56Sopenharmony_ci   since all standard encodings (except rot13) encode str to bytes.
3967db96d56Sopenharmony_ci   Use PyCodec_Encode() for encoding with rot13 and non-standard codecs
3977db96d56Sopenharmony_ci   that encode form str to non-bytes. */
3987db96d56Sopenharmony_ci
3997db96d56Sopenharmony_ciPy_DEPRECATED(3.6) PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedObject(
4007db96d56Sopenharmony_ci    PyObject *unicode,          /* Unicode object */
4017db96d56Sopenharmony_ci    const char *encoding,       /* encoding */
4027db96d56Sopenharmony_ci    const char *errors          /* error handling */
4037db96d56Sopenharmony_ci    );
4047db96d56Sopenharmony_ci
4057db96d56Sopenharmony_ci/* Encodes a Unicode object and returns the result as Python string
4067db96d56Sopenharmony_ci   object. */
4077db96d56Sopenharmony_ci
4087db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_AsEncodedString(
4097db96d56Sopenharmony_ci    PyObject *unicode,          /* Unicode object */
4107db96d56Sopenharmony_ci    const char *encoding,       /* encoding */
4117db96d56Sopenharmony_ci    const char *errors          /* error handling */
4127db96d56Sopenharmony_ci    );
4137db96d56Sopenharmony_ci
4147db96d56Sopenharmony_ci/* Encodes a Unicode object and returns the result as Unicode
4157db96d56Sopenharmony_ci   object.
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci   This API is DEPRECATED.  The only supported standard encodings is rot13.
4187db96d56Sopenharmony_ci   Use PyCodec_Encode() to encode with rot13 and non-standard codecs
4197db96d56Sopenharmony_ci   that encode from str to str. */
4207db96d56Sopenharmony_ci
4217db96d56Sopenharmony_ciPy_DEPRECATED(3.6) PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedUnicode(
4227db96d56Sopenharmony_ci    PyObject *unicode,          /* Unicode object */
4237db96d56Sopenharmony_ci    const char *encoding,       /* encoding */
4247db96d56Sopenharmony_ci    const char *errors          /* error handling */
4257db96d56Sopenharmony_ci    );
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ci/* Build an encoding map. */
4287db96d56Sopenharmony_ci
4297db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_BuildEncodingMap(
4307db96d56Sopenharmony_ci    PyObject* string            /* 256 character map */
4317db96d56Sopenharmony_ci   );
4327db96d56Sopenharmony_ci
4337db96d56Sopenharmony_ci/* --- UTF-7 Codecs ------------------------------------------------------- */
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7(
4367db96d56Sopenharmony_ci    const char *string,         /* UTF-7 encoded string */
4377db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
4387db96d56Sopenharmony_ci    const char *errors          /* error handling */
4397db96d56Sopenharmony_ci    );
4407db96d56Sopenharmony_ci
4417db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7Stateful(
4427db96d56Sopenharmony_ci    const char *string,         /* UTF-7 encoded string */
4437db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
4447db96d56Sopenharmony_ci    const char *errors,         /* error handling */
4457db96d56Sopenharmony_ci    Py_ssize_t *consumed        /* bytes consumed */
4467db96d56Sopenharmony_ci    );
4477db96d56Sopenharmony_ci
4487db96d56Sopenharmony_ci/* --- UTF-8 Codecs ------------------------------------------------------- */
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8(
4517db96d56Sopenharmony_ci    const char *string,         /* UTF-8 encoded string */
4527db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
4537db96d56Sopenharmony_ci    const char *errors          /* error handling */
4547db96d56Sopenharmony_ci    );
4557db96d56Sopenharmony_ci
4567db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8Stateful(
4577db96d56Sopenharmony_ci    const char *string,         /* UTF-8 encoded string */
4587db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
4597db96d56Sopenharmony_ci    const char *errors,         /* error handling */
4607db96d56Sopenharmony_ci    Py_ssize_t *consumed        /* bytes consumed */
4617db96d56Sopenharmony_ci    );
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_AsUTF8String(
4647db96d56Sopenharmony_ci    PyObject *unicode           /* Unicode object */
4657db96d56Sopenharmony_ci    );
4667db96d56Sopenharmony_ci
4677db96d56Sopenharmony_ci/* Returns a pointer to the default encoding (UTF-8) of the
4687db96d56Sopenharmony_ci   Unicode object unicode and the size of the encoded representation
4697db96d56Sopenharmony_ci   in bytes stored in *size.
4707db96d56Sopenharmony_ci
4717db96d56Sopenharmony_ci   In case of an error, no *size is set.
4727db96d56Sopenharmony_ci
4737db96d56Sopenharmony_ci   This function caches the UTF-8 encoded string in the unicodeobject
4747db96d56Sopenharmony_ci   and subsequent calls will return the same string.  The memory is released
4757db96d56Sopenharmony_ci   when the unicodeobject is deallocated.
4767db96d56Sopenharmony_ci*/
4777db96d56Sopenharmony_ci
4787db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000
4797db96d56Sopenharmony_ciPyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize(
4807db96d56Sopenharmony_ci    PyObject *unicode,
4817db96d56Sopenharmony_ci    Py_ssize_t *size);
4827db96d56Sopenharmony_ci#endif
4837db96d56Sopenharmony_ci
4847db96d56Sopenharmony_ci/* --- UTF-32 Codecs ------------------------------------------------------ */
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci/* Decodes length bytes from a UTF-32 encoded buffer string and returns
4877db96d56Sopenharmony_ci   the corresponding Unicode object.
4887db96d56Sopenharmony_ci
4897db96d56Sopenharmony_ci   errors (if non-NULL) defines the error handling. It defaults
4907db96d56Sopenharmony_ci   to "strict".
4917db96d56Sopenharmony_ci
4927db96d56Sopenharmony_ci   If byteorder is non-NULL, the decoder starts decoding using the
4937db96d56Sopenharmony_ci   given byte order:
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci    *byteorder == -1: little endian
4967db96d56Sopenharmony_ci    *byteorder == 0:  native order
4977db96d56Sopenharmony_ci    *byteorder == 1:  big endian
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ci   In native mode, the first four bytes of the stream are checked for a
5007db96d56Sopenharmony_ci   BOM mark. If found, the BOM mark is analysed, the byte order
5017db96d56Sopenharmony_ci   adjusted and the BOM skipped.  In the other modes, no BOM mark
5027db96d56Sopenharmony_ci   interpretation is done. After completion, *byteorder is set to the
5037db96d56Sopenharmony_ci   current byte order at the end of input data.
5047db96d56Sopenharmony_ci
5057db96d56Sopenharmony_ci   If byteorder is NULL, the codec starts in native order mode.
5067db96d56Sopenharmony_ci
5077db96d56Sopenharmony_ci*/
5087db96d56Sopenharmony_ci
5097db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF32(
5107db96d56Sopenharmony_ci    const char *string,         /* UTF-32 encoded string */
5117db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
5127db96d56Sopenharmony_ci    const char *errors,         /* error handling */
5137db96d56Sopenharmony_ci    int *byteorder              /* pointer to byteorder to use
5147db96d56Sopenharmony_ci                                   0=native;-1=LE,1=BE; updated on
5157db96d56Sopenharmony_ci                                   exit */
5167db96d56Sopenharmony_ci    );
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF32Stateful(
5197db96d56Sopenharmony_ci    const char *string,         /* UTF-32 encoded string */
5207db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
5217db96d56Sopenharmony_ci    const char *errors,         /* error handling */
5227db96d56Sopenharmony_ci    int *byteorder,             /* pointer to byteorder to use
5237db96d56Sopenharmony_ci                                   0=native;-1=LE,1=BE; updated on
5247db96d56Sopenharmony_ci                                   exit */
5257db96d56Sopenharmony_ci    Py_ssize_t *consumed        /* bytes consumed */
5267db96d56Sopenharmony_ci    );
5277db96d56Sopenharmony_ci
5287db96d56Sopenharmony_ci/* Returns a Python string using the UTF-32 encoding in native byte
5297db96d56Sopenharmony_ci   order. The string always starts with a BOM mark.  */
5307db96d56Sopenharmony_ci
5317db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_AsUTF32String(
5327db96d56Sopenharmony_ci    PyObject *unicode           /* Unicode object */
5337db96d56Sopenharmony_ci    );
5347db96d56Sopenharmony_ci
5357db96d56Sopenharmony_ci/* Returns a Python string object holding the UTF-32 encoded value of
5367db96d56Sopenharmony_ci   the Unicode data.
5377db96d56Sopenharmony_ci
5387db96d56Sopenharmony_ci   If byteorder is not 0, output is written according to the following
5397db96d56Sopenharmony_ci   byte order:
5407db96d56Sopenharmony_ci
5417db96d56Sopenharmony_ci   byteorder == -1: little endian
5427db96d56Sopenharmony_ci   byteorder == 0:  native byte order (writes a BOM mark)
5437db96d56Sopenharmony_ci   byteorder == 1:  big endian
5447db96d56Sopenharmony_ci
5457db96d56Sopenharmony_ci   If byteorder is 0, the output string will always start with the
5467db96d56Sopenharmony_ci   Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is
5477db96d56Sopenharmony_ci   prepended.
5487db96d56Sopenharmony_ci
5497db96d56Sopenharmony_ci*/
5507db96d56Sopenharmony_ci
5517db96d56Sopenharmony_ci/* --- UTF-16 Codecs ------------------------------------------------------ */
5527db96d56Sopenharmony_ci
5537db96d56Sopenharmony_ci/* Decodes length bytes from a UTF-16 encoded buffer string and returns
5547db96d56Sopenharmony_ci   the corresponding Unicode object.
5557db96d56Sopenharmony_ci
5567db96d56Sopenharmony_ci   errors (if non-NULL) defines the error handling. It defaults
5577db96d56Sopenharmony_ci   to "strict".
5587db96d56Sopenharmony_ci
5597db96d56Sopenharmony_ci   If byteorder is non-NULL, the decoder starts decoding using the
5607db96d56Sopenharmony_ci   given byte order:
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_ci    *byteorder == -1: little endian
5637db96d56Sopenharmony_ci    *byteorder == 0:  native order
5647db96d56Sopenharmony_ci    *byteorder == 1:  big endian
5657db96d56Sopenharmony_ci
5667db96d56Sopenharmony_ci   In native mode, the first two bytes of the stream are checked for a
5677db96d56Sopenharmony_ci   BOM mark. If found, the BOM mark is analysed, the byte order
5687db96d56Sopenharmony_ci   adjusted and the BOM skipped.  In the other modes, no BOM mark
5697db96d56Sopenharmony_ci   interpretation is done. After completion, *byteorder is set to the
5707db96d56Sopenharmony_ci   current byte order at the end of input data.
5717db96d56Sopenharmony_ci
5727db96d56Sopenharmony_ci   If byteorder is NULL, the codec starts in native order mode.
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci*/
5757db96d56Sopenharmony_ci
5767db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16(
5777db96d56Sopenharmony_ci    const char *string,         /* UTF-16 encoded string */
5787db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
5797db96d56Sopenharmony_ci    const char *errors,         /* error handling */
5807db96d56Sopenharmony_ci    int *byteorder              /* pointer to byteorder to use
5817db96d56Sopenharmony_ci                                   0=native;-1=LE,1=BE; updated on
5827db96d56Sopenharmony_ci                                   exit */
5837db96d56Sopenharmony_ci    );
5847db96d56Sopenharmony_ci
5857db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16Stateful(
5867db96d56Sopenharmony_ci    const char *string,         /* UTF-16 encoded string */
5877db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
5887db96d56Sopenharmony_ci    const char *errors,         /* error handling */
5897db96d56Sopenharmony_ci    int *byteorder,             /* pointer to byteorder to use
5907db96d56Sopenharmony_ci                                   0=native;-1=LE,1=BE; updated on
5917db96d56Sopenharmony_ci                                   exit */
5927db96d56Sopenharmony_ci    Py_ssize_t *consumed        /* bytes consumed */
5937db96d56Sopenharmony_ci    );
5947db96d56Sopenharmony_ci
5957db96d56Sopenharmony_ci/* Returns a Python string using the UTF-16 encoding in native byte
5967db96d56Sopenharmony_ci   order. The string always starts with a BOM mark.  */
5977db96d56Sopenharmony_ci
5987db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_AsUTF16String(
5997db96d56Sopenharmony_ci    PyObject *unicode           /* Unicode object */
6007db96d56Sopenharmony_ci    );
6017db96d56Sopenharmony_ci
6027db96d56Sopenharmony_ci/* --- Unicode-Escape Codecs ---------------------------------------------- */
6037db96d56Sopenharmony_ci
6047db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeUnicodeEscape(
6057db96d56Sopenharmony_ci    const char *string,         /* Unicode-Escape encoded string */
6067db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
6077db96d56Sopenharmony_ci    const char *errors          /* error handling */
6087db96d56Sopenharmony_ci    );
6097db96d56Sopenharmony_ci
6107db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_AsUnicodeEscapeString(
6117db96d56Sopenharmony_ci    PyObject *unicode           /* Unicode object */
6127db96d56Sopenharmony_ci    );
6137db96d56Sopenharmony_ci
6147db96d56Sopenharmony_ci/* --- Raw-Unicode-Escape Codecs ------------------------------------------ */
6157db96d56Sopenharmony_ci
6167db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeRawUnicodeEscape(
6177db96d56Sopenharmony_ci    const char *string,         /* Raw-Unicode-Escape encoded string */
6187db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
6197db96d56Sopenharmony_ci    const char *errors          /* error handling */
6207db96d56Sopenharmony_ci    );
6217db96d56Sopenharmony_ci
6227db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_AsRawUnicodeEscapeString(
6237db96d56Sopenharmony_ci    PyObject *unicode           /* Unicode object */
6247db96d56Sopenharmony_ci    );
6257db96d56Sopenharmony_ci
6267db96d56Sopenharmony_ci/* --- Latin-1 Codecs -----------------------------------------------------
6277db96d56Sopenharmony_ci
6287db96d56Sopenharmony_ci   Note: Latin-1 corresponds to the first 256 Unicode ordinals. */
6297db96d56Sopenharmony_ci
6307db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeLatin1(
6317db96d56Sopenharmony_ci    const char *string,         /* Latin-1 encoded string */
6327db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
6337db96d56Sopenharmony_ci    const char *errors          /* error handling */
6347db96d56Sopenharmony_ci    );
6357db96d56Sopenharmony_ci
6367db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_AsLatin1String(
6377db96d56Sopenharmony_ci    PyObject *unicode           /* Unicode object */
6387db96d56Sopenharmony_ci    );
6397db96d56Sopenharmony_ci
6407db96d56Sopenharmony_ci/* --- ASCII Codecs -------------------------------------------------------
6417db96d56Sopenharmony_ci
6427db96d56Sopenharmony_ci   Only 7-bit ASCII data is excepted. All other codes generate errors.
6437db96d56Sopenharmony_ci
6447db96d56Sopenharmony_ci*/
6457db96d56Sopenharmony_ci
6467db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeASCII(
6477db96d56Sopenharmony_ci    const char *string,         /* ASCII encoded string */
6487db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
6497db96d56Sopenharmony_ci    const char *errors          /* error handling */
6507db96d56Sopenharmony_ci    );
6517db96d56Sopenharmony_ci
6527db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_AsASCIIString(
6537db96d56Sopenharmony_ci    PyObject *unicode           /* Unicode object */
6547db96d56Sopenharmony_ci    );
6557db96d56Sopenharmony_ci
6567db96d56Sopenharmony_ci/* --- Character Map Codecs -----------------------------------------------
6577db96d56Sopenharmony_ci
6587db96d56Sopenharmony_ci   This codec uses mappings to encode and decode characters.
6597db96d56Sopenharmony_ci
6607db96d56Sopenharmony_ci   Decoding mappings must map byte ordinals (integers in the range from 0 to
6617db96d56Sopenharmony_ci   255) to Unicode strings, integers (which are then interpreted as Unicode
6627db96d56Sopenharmony_ci   ordinals) or None.  Unmapped data bytes (ones which cause a LookupError)
6637db96d56Sopenharmony_ci   as well as mapped to None, 0xFFFE or '\ufffe' are treated as "undefined
6647db96d56Sopenharmony_ci   mapping" and cause an error.
6657db96d56Sopenharmony_ci
6667db96d56Sopenharmony_ci   Encoding mappings must map Unicode ordinal integers to bytes objects,
6677db96d56Sopenharmony_ci   integers in the range from 0 to 255 or None.  Unmapped character
6687db96d56Sopenharmony_ci   ordinals (ones which cause a LookupError) as well as mapped to
6697db96d56Sopenharmony_ci   None are treated as "undefined mapping" and cause an error.
6707db96d56Sopenharmony_ci
6717db96d56Sopenharmony_ci*/
6727db96d56Sopenharmony_ci
6737db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeCharmap(
6747db96d56Sopenharmony_ci    const char *string,         /* Encoded string */
6757db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
6767db96d56Sopenharmony_ci    PyObject *mapping,          /* decoding mapping */
6777db96d56Sopenharmony_ci    const char *errors          /* error handling */
6787db96d56Sopenharmony_ci    );
6797db96d56Sopenharmony_ci
6807db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_AsCharmapString(
6817db96d56Sopenharmony_ci    PyObject *unicode,          /* Unicode object */
6827db96d56Sopenharmony_ci    PyObject *mapping           /* encoding mapping */
6837db96d56Sopenharmony_ci    );
6847db96d56Sopenharmony_ci
6857db96d56Sopenharmony_ci/* --- MBCS codecs for Windows -------------------------------------------- */
6867db96d56Sopenharmony_ci
6877db96d56Sopenharmony_ci#ifdef MS_WINDOWS
6887db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCS(
6897db96d56Sopenharmony_ci    const char *string,         /* MBCS encoded string */
6907db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
6917db96d56Sopenharmony_ci    const char *errors          /* error handling */
6927db96d56Sopenharmony_ci    );
6937db96d56Sopenharmony_ci
6947db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCSStateful(
6957db96d56Sopenharmony_ci    const char *string,         /* MBCS encoded string */
6967db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
6977db96d56Sopenharmony_ci    const char *errors,         /* error handling */
6987db96d56Sopenharmony_ci    Py_ssize_t *consumed        /* bytes consumed */
6997db96d56Sopenharmony_ci    );
7007db96d56Sopenharmony_ci
7017db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
7027db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeCodePageStateful(
7037db96d56Sopenharmony_ci    int code_page,              /* code page number */
7047db96d56Sopenharmony_ci    const char *string,         /* encoded string */
7057db96d56Sopenharmony_ci    Py_ssize_t length,          /* size of string */
7067db96d56Sopenharmony_ci    const char *errors,         /* error handling */
7077db96d56Sopenharmony_ci    Py_ssize_t *consumed        /* bytes consumed */
7087db96d56Sopenharmony_ci    );
7097db96d56Sopenharmony_ci#endif
7107db96d56Sopenharmony_ci
7117db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_AsMBCSString(
7127db96d56Sopenharmony_ci    PyObject *unicode           /* Unicode object */
7137db96d56Sopenharmony_ci    );
7147db96d56Sopenharmony_ci
7157db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
7167db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_EncodeCodePage(
7177db96d56Sopenharmony_ci    int code_page,              /* code page number */
7187db96d56Sopenharmony_ci    PyObject *unicode,          /* Unicode object */
7197db96d56Sopenharmony_ci    const char *errors          /* error handling */
7207db96d56Sopenharmony_ci    );
7217db96d56Sopenharmony_ci#endif
7227db96d56Sopenharmony_ci
7237db96d56Sopenharmony_ci#endif /* MS_WINDOWS */
7247db96d56Sopenharmony_ci
7257db96d56Sopenharmony_ci/* --- Locale encoding --------------------------------------------------- */
7267db96d56Sopenharmony_ci
7277db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
7287db96d56Sopenharmony_ci/* Decode a string from the current locale encoding. The decoder is strict if
7297db96d56Sopenharmony_ci   *surrogateescape* is equal to zero, otherwise it uses the 'surrogateescape'
7307db96d56Sopenharmony_ci   error handler (PEP 383) to escape undecodable bytes. If a byte sequence can
7317db96d56Sopenharmony_ci   be decoded as a surrogate character and *surrogateescape* is not equal to
7327db96d56Sopenharmony_ci   zero, the byte sequence is escaped using the 'surrogateescape' error handler
7337db96d56Sopenharmony_ci   instead of being decoded. *str* must end with a null character but cannot
7347db96d56Sopenharmony_ci   contain embedded null characters. */
7357db96d56Sopenharmony_ci
7367db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeLocaleAndSize(
7377db96d56Sopenharmony_ci    const char *str,
7387db96d56Sopenharmony_ci    Py_ssize_t len,
7397db96d56Sopenharmony_ci    const char *errors);
7407db96d56Sopenharmony_ci
7417db96d56Sopenharmony_ci/* Similar to PyUnicode_DecodeLocaleAndSize(), but compute the string
7427db96d56Sopenharmony_ci   length using strlen(). */
7437db96d56Sopenharmony_ci
7447db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeLocale(
7457db96d56Sopenharmony_ci    const char *str,
7467db96d56Sopenharmony_ci    const char *errors);
7477db96d56Sopenharmony_ci
7487db96d56Sopenharmony_ci/* Encode a Unicode object to the current locale encoding. The encoder is
7497db96d56Sopenharmony_ci   strict is *surrogateescape* is equal to zero, otherwise the
7507db96d56Sopenharmony_ci   "surrogateescape" error handler is used. Return a bytes object. The string
7517db96d56Sopenharmony_ci   cannot contain embedded null characters. */
7527db96d56Sopenharmony_ci
7537db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_EncodeLocale(
7547db96d56Sopenharmony_ci    PyObject *unicode,
7557db96d56Sopenharmony_ci    const char *errors
7567db96d56Sopenharmony_ci    );
7577db96d56Sopenharmony_ci#endif
7587db96d56Sopenharmony_ci
7597db96d56Sopenharmony_ci/* --- File system encoding ---------------------------------------------- */
7607db96d56Sopenharmony_ci
7617db96d56Sopenharmony_ci/* ParseTuple converter: encode str objects to bytes using
7627db96d56Sopenharmony_ci   PyUnicode_EncodeFSDefault(); bytes objects are output as-is. */
7637db96d56Sopenharmony_ci
7647db96d56Sopenharmony_ciPyAPI_FUNC(int) PyUnicode_FSConverter(PyObject*, void*);
7657db96d56Sopenharmony_ci
7667db96d56Sopenharmony_ci/* ParseTuple converter: decode bytes objects to unicode using
7677db96d56Sopenharmony_ci   PyUnicode_DecodeFSDefaultAndSize(); str objects are output as-is. */
7687db96d56Sopenharmony_ci
7697db96d56Sopenharmony_ciPyAPI_FUNC(int) PyUnicode_FSDecoder(PyObject*, void*);
7707db96d56Sopenharmony_ci
7717db96d56Sopenharmony_ci/* Decode a null-terminated string using Py_FileSystemDefaultEncoding
7727db96d56Sopenharmony_ci   and the "surrogateescape" error handler.
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_ci   If Py_FileSystemDefaultEncoding is not set, fall back to the locale
7757db96d56Sopenharmony_ci   encoding.
7767db96d56Sopenharmony_ci
7777db96d56Sopenharmony_ci   Use PyUnicode_DecodeFSDefaultAndSize() if the string length is known.
7787db96d56Sopenharmony_ci*/
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeFSDefault(
7817db96d56Sopenharmony_ci    const char *s               /* encoded string */
7827db96d56Sopenharmony_ci    );
7837db96d56Sopenharmony_ci
7847db96d56Sopenharmony_ci/* Decode a string using Py_FileSystemDefaultEncoding
7857db96d56Sopenharmony_ci   and the "surrogateescape" error handler.
7867db96d56Sopenharmony_ci
7877db96d56Sopenharmony_ci   If Py_FileSystemDefaultEncoding is not set, fall back to the locale
7887db96d56Sopenharmony_ci   encoding.
7897db96d56Sopenharmony_ci*/
7907db96d56Sopenharmony_ci
7917db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_DecodeFSDefaultAndSize(
7927db96d56Sopenharmony_ci    const char *s,               /* encoded string */
7937db96d56Sopenharmony_ci    Py_ssize_t size              /* size */
7947db96d56Sopenharmony_ci    );
7957db96d56Sopenharmony_ci
7967db96d56Sopenharmony_ci/* Encode a Unicode object to Py_FileSystemDefaultEncoding with the
7977db96d56Sopenharmony_ci   "surrogateescape" error handler, and return bytes.
7987db96d56Sopenharmony_ci
7997db96d56Sopenharmony_ci   If Py_FileSystemDefaultEncoding is not set, fall back to the locale
8007db96d56Sopenharmony_ci   encoding.
8017db96d56Sopenharmony_ci*/
8027db96d56Sopenharmony_ci
8037db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_EncodeFSDefault(
8047db96d56Sopenharmony_ci    PyObject *unicode
8057db96d56Sopenharmony_ci    );
8067db96d56Sopenharmony_ci
8077db96d56Sopenharmony_ci/* --- Methods & Slots ----------------------------------------------------
8087db96d56Sopenharmony_ci
8097db96d56Sopenharmony_ci   These are capable of handling Unicode objects and strings on input
8107db96d56Sopenharmony_ci   (we refer to them as strings in the descriptions) and return
8117db96d56Sopenharmony_ci   Unicode objects or integers as appropriate. */
8127db96d56Sopenharmony_ci
8137db96d56Sopenharmony_ci/* Concat two strings giving a new Unicode string. */
8147db96d56Sopenharmony_ci
8157db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_Concat(
8167db96d56Sopenharmony_ci    PyObject *left,             /* Left string */
8177db96d56Sopenharmony_ci    PyObject *right             /* Right string */
8187db96d56Sopenharmony_ci    );
8197db96d56Sopenharmony_ci
8207db96d56Sopenharmony_ci/* Concat two strings and put the result in *pleft
8217db96d56Sopenharmony_ci   (sets *pleft to NULL on error) */
8227db96d56Sopenharmony_ci
8237db96d56Sopenharmony_ciPyAPI_FUNC(void) PyUnicode_Append(
8247db96d56Sopenharmony_ci    PyObject **pleft,           /* Pointer to left string */
8257db96d56Sopenharmony_ci    PyObject *right             /* Right string */
8267db96d56Sopenharmony_ci    );
8277db96d56Sopenharmony_ci
8287db96d56Sopenharmony_ci/* Concat two strings, put the result in *pleft and drop the right object
8297db96d56Sopenharmony_ci   (sets *pleft to NULL on error) */
8307db96d56Sopenharmony_ci
8317db96d56Sopenharmony_ciPyAPI_FUNC(void) PyUnicode_AppendAndDel(
8327db96d56Sopenharmony_ci    PyObject **pleft,           /* Pointer to left string */
8337db96d56Sopenharmony_ci    PyObject *right             /* Right string */
8347db96d56Sopenharmony_ci    );
8357db96d56Sopenharmony_ci
8367db96d56Sopenharmony_ci/* Split a string giving a list of Unicode strings.
8377db96d56Sopenharmony_ci
8387db96d56Sopenharmony_ci   If sep is NULL, splitting will be done at all whitespace
8397db96d56Sopenharmony_ci   substrings. Otherwise, splits occur at the given separator.
8407db96d56Sopenharmony_ci
8417db96d56Sopenharmony_ci   At most maxsplit splits will be done. If negative, no limit is set.
8427db96d56Sopenharmony_ci
8437db96d56Sopenharmony_ci   Separators are not included in the resulting list.
8447db96d56Sopenharmony_ci
8457db96d56Sopenharmony_ci*/
8467db96d56Sopenharmony_ci
8477db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_Split(
8487db96d56Sopenharmony_ci    PyObject *s,                /* String to split */
8497db96d56Sopenharmony_ci    PyObject *sep,              /* String separator */
8507db96d56Sopenharmony_ci    Py_ssize_t maxsplit         /* Maxsplit count */
8517db96d56Sopenharmony_ci    );
8527db96d56Sopenharmony_ci
8537db96d56Sopenharmony_ci/* Dito, but split at line breaks.
8547db96d56Sopenharmony_ci
8557db96d56Sopenharmony_ci   CRLF is considered to be one line break. Line breaks are not
8567db96d56Sopenharmony_ci   included in the resulting list. */
8577db96d56Sopenharmony_ci
8587db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_Splitlines(
8597db96d56Sopenharmony_ci    PyObject *s,                /* String to split */
8607db96d56Sopenharmony_ci    int keepends                /* If true, line end markers are included */
8617db96d56Sopenharmony_ci    );
8627db96d56Sopenharmony_ci
8637db96d56Sopenharmony_ci/* Partition a string using a given separator. */
8647db96d56Sopenharmony_ci
8657db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_Partition(
8667db96d56Sopenharmony_ci    PyObject *s,                /* String to partition */
8677db96d56Sopenharmony_ci    PyObject *sep               /* String separator */
8687db96d56Sopenharmony_ci    );
8697db96d56Sopenharmony_ci
8707db96d56Sopenharmony_ci/* Partition a string using a given separator, searching from the end of the
8717db96d56Sopenharmony_ci   string. */
8727db96d56Sopenharmony_ci
8737db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_RPartition(
8747db96d56Sopenharmony_ci    PyObject *s,                /* String to partition */
8757db96d56Sopenharmony_ci    PyObject *sep               /* String separator */
8767db96d56Sopenharmony_ci    );
8777db96d56Sopenharmony_ci
8787db96d56Sopenharmony_ci/* Split a string giving a list of Unicode strings.
8797db96d56Sopenharmony_ci
8807db96d56Sopenharmony_ci   If sep is NULL, splitting will be done at all whitespace
8817db96d56Sopenharmony_ci   substrings. Otherwise, splits occur at the given separator.
8827db96d56Sopenharmony_ci
8837db96d56Sopenharmony_ci   At most maxsplit splits will be done. But unlike PyUnicode_Split
8847db96d56Sopenharmony_ci   PyUnicode_RSplit splits from the end of the string. If negative,
8857db96d56Sopenharmony_ci   no limit is set.
8867db96d56Sopenharmony_ci
8877db96d56Sopenharmony_ci   Separators are not included in the resulting list.
8887db96d56Sopenharmony_ci
8897db96d56Sopenharmony_ci*/
8907db96d56Sopenharmony_ci
8917db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_RSplit(
8927db96d56Sopenharmony_ci    PyObject *s,                /* String to split */
8937db96d56Sopenharmony_ci    PyObject *sep,              /* String separator */
8947db96d56Sopenharmony_ci    Py_ssize_t maxsplit         /* Maxsplit count */
8957db96d56Sopenharmony_ci    );
8967db96d56Sopenharmony_ci
8977db96d56Sopenharmony_ci/* Translate a string by applying a character mapping table to it and
8987db96d56Sopenharmony_ci   return the resulting Unicode object.
8997db96d56Sopenharmony_ci
9007db96d56Sopenharmony_ci   The mapping table must map Unicode ordinal integers to Unicode strings,
9017db96d56Sopenharmony_ci   Unicode ordinal integers or None (causing deletion of the character).
9027db96d56Sopenharmony_ci
9037db96d56Sopenharmony_ci   Mapping tables may be dictionaries or sequences. Unmapped character
9047db96d56Sopenharmony_ci   ordinals (ones which cause a LookupError) are left untouched and
9057db96d56Sopenharmony_ci   are copied as-is.
9067db96d56Sopenharmony_ci
9077db96d56Sopenharmony_ci*/
9087db96d56Sopenharmony_ci
9097db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyUnicode_Translate(
9107db96d56Sopenharmony_ci    PyObject *str,              /* String */
9117db96d56Sopenharmony_ci    PyObject *table,            /* Translate table */
9127db96d56Sopenharmony_ci    const char *errors          /* error handling */
9137db96d56Sopenharmony_ci    );
9147db96d56Sopenharmony_ci
9157db96d56Sopenharmony_ci/* Join a sequence of strings using the given separator and return
9167db96d56Sopenharmony_ci   the resulting Unicode string. */
9177db96d56Sopenharmony_ci
9187db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) PyUnicode_Join(
9197db96d56Sopenharmony_ci    PyObject *separator,        /* Separator string */
9207db96d56Sopenharmony_ci    PyObject *seq               /* Sequence object */
9217db96d56Sopenharmony_ci    );
9227db96d56Sopenharmony_ci
9237db96d56Sopenharmony_ci/* Return 1 if substr matches str[start:end] at the given tail end, 0
9247db96d56Sopenharmony_ci   otherwise. */
9257db96d56Sopenharmony_ci
9267db96d56Sopenharmony_ciPyAPI_FUNC(Py_ssize_t) PyUnicode_Tailmatch(
9277db96d56Sopenharmony_ci    PyObject *str,              /* String */
9287db96d56Sopenharmony_ci    PyObject *substr,           /* Prefix or Suffix string */
9297db96d56Sopenharmony_ci    Py_ssize_t start,           /* Start index */
9307db96d56Sopenharmony_ci    Py_ssize_t end,             /* Stop index */
9317db96d56Sopenharmony_ci    int direction               /* Tail end: -1 prefix, +1 suffix */
9327db96d56Sopenharmony_ci    );
9337db96d56Sopenharmony_ci
9347db96d56Sopenharmony_ci/* Return the first position of substr in str[start:end] using the
9357db96d56Sopenharmony_ci   given search direction or -1 if not found. -2 is returned in case
9367db96d56Sopenharmony_ci   an error occurred and an exception is set. */
9377db96d56Sopenharmony_ci
9387db96d56Sopenharmony_ciPyAPI_FUNC(Py_ssize_t) PyUnicode_Find(
9397db96d56Sopenharmony_ci    PyObject *str,              /* String */
9407db96d56Sopenharmony_ci    PyObject *substr,           /* Substring to find */
9417db96d56Sopenharmony_ci    Py_ssize_t start,           /* Start index */
9427db96d56Sopenharmony_ci    Py_ssize_t end,             /* Stop index */
9437db96d56Sopenharmony_ci    int direction               /* Find direction: +1 forward, -1 backward */
9447db96d56Sopenharmony_ci    );
9457db96d56Sopenharmony_ci
9467db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
9477db96d56Sopenharmony_ci/* Like PyUnicode_Find, but search for single character only. */
9487db96d56Sopenharmony_ciPyAPI_FUNC(Py_ssize_t) PyUnicode_FindChar(
9497db96d56Sopenharmony_ci    PyObject *str,
9507db96d56Sopenharmony_ci    Py_UCS4 ch,
9517db96d56Sopenharmony_ci    Py_ssize_t start,
9527db96d56Sopenharmony_ci    Py_ssize_t end,
9537db96d56Sopenharmony_ci    int direction
9547db96d56Sopenharmony_ci    );
9557db96d56Sopenharmony_ci#endif
9567db96d56Sopenharmony_ci
9577db96d56Sopenharmony_ci/* Count the number of occurrences of substr in str[start:end]. */
9587db96d56Sopenharmony_ci
9597db96d56Sopenharmony_ciPyAPI_FUNC(Py_ssize_t) PyUnicode_Count(
9607db96d56Sopenharmony_ci    PyObject *str,              /* String */
9617db96d56Sopenharmony_ci    PyObject *substr,           /* Substring to count */
9627db96d56Sopenharmony_ci    Py_ssize_t start,           /* Start index */
9637db96d56Sopenharmony_ci    Py_ssize_t end              /* Stop index */
9647db96d56Sopenharmony_ci    );
9657db96d56Sopenharmony_ci
9667db96d56Sopenharmony_ci/* Replace at most maxcount occurrences of substr in str with replstr
9677db96d56Sopenharmony_ci   and return the resulting Unicode object. */
9687db96d56Sopenharmony_ci
9697db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyUnicode_Replace(
9707db96d56Sopenharmony_ci    PyObject *str,              /* String */
9717db96d56Sopenharmony_ci    PyObject *substr,           /* Substring to find */
9727db96d56Sopenharmony_ci    PyObject *replstr,          /* Substring to replace */
9737db96d56Sopenharmony_ci    Py_ssize_t maxcount         /* Max. number of replacements to apply;
9747db96d56Sopenharmony_ci                                   -1 = all */
9757db96d56Sopenharmony_ci    );
9767db96d56Sopenharmony_ci
9777db96d56Sopenharmony_ci/* Compare two strings and return -1, 0, 1 for less than, equal,
9787db96d56Sopenharmony_ci   greater than resp.
9797db96d56Sopenharmony_ci   Raise an exception and return -1 on error. */
9807db96d56Sopenharmony_ci
9817db96d56Sopenharmony_ciPyAPI_FUNC(int) PyUnicode_Compare(
9827db96d56Sopenharmony_ci    PyObject *left,             /* Left string */
9837db96d56Sopenharmony_ci    PyObject *right             /* Right string */
9847db96d56Sopenharmony_ci    );
9857db96d56Sopenharmony_ci
9867db96d56Sopenharmony_ci/* Compare a Unicode object with C string and return -1, 0, 1 for less than,
9877db96d56Sopenharmony_ci   equal, and greater than, respectively.  It is best to pass only
9887db96d56Sopenharmony_ci   ASCII-encoded strings, but the function interprets the input string as
9897db96d56Sopenharmony_ci   ISO-8859-1 if it contains non-ASCII characters.
9907db96d56Sopenharmony_ci   This function does not raise exceptions. */
9917db96d56Sopenharmony_ci
9927db96d56Sopenharmony_ciPyAPI_FUNC(int) PyUnicode_CompareWithASCIIString(
9937db96d56Sopenharmony_ci    PyObject *left,
9947db96d56Sopenharmony_ci    const char *right           /* ASCII-encoded string */
9957db96d56Sopenharmony_ci    );
9967db96d56Sopenharmony_ci
9977db96d56Sopenharmony_ci/* Rich compare two strings and return one of the following:
9987db96d56Sopenharmony_ci
9997db96d56Sopenharmony_ci   - NULL in case an exception was raised
10007db96d56Sopenharmony_ci   - Py_True or Py_False for successful comparisons
10017db96d56Sopenharmony_ci   - Py_NotImplemented in case the type combination is unknown
10027db96d56Sopenharmony_ci
10037db96d56Sopenharmony_ci   Possible values for op:
10047db96d56Sopenharmony_ci
10057db96d56Sopenharmony_ci     Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE
10067db96d56Sopenharmony_ci
10077db96d56Sopenharmony_ci*/
10087db96d56Sopenharmony_ci
10097db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyUnicode_RichCompare(
10107db96d56Sopenharmony_ci    PyObject *left,             /* Left string */
10117db96d56Sopenharmony_ci    PyObject *right,            /* Right string */
10127db96d56Sopenharmony_ci    int op                      /* Operation: Py_EQ, Py_NE, Py_GT, etc. */
10137db96d56Sopenharmony_ci    );
10147db96d56Sopenharmony_ci
10157db96d56Sopenharmony_ci/* Apply an argument tuple or dictionary to a format string and return
10167db96d56Sopenharmony_ci   the resulting Unicode string. */
10177db96d56Sopenharmony_ci
10187db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyUnicode_Format(
10197db96d56Sopenharmony_ci    PyObject *format,           /* Format string */
10207db96d56Sopenharmony_ci    PyObject *args              /* Argument tuple or dictionary */
10217db96d56Sopenharmony_ci    );
10227db96d56Sopenharmony_ci
10237db96d56Sopenharmony_ci/* Checks whether element is contained in container and return 1/0
10247db96d56Sopenharmony_ci   accordingly.
10257db96d56Sopenharmony_ci
10267db96d56Sopenharmony_ci   element has to coerce to a one element Unicode string. -1 is
10277db96d56Sopenharmony_ci   returned in case of an error. */
10287db96d56Sopenharmony_ci
10297db96d56Sopenharmony_ciPyAPI_FUNC(int) PyUnicode_Contains(
10307db96d56Sopenharmony_ci    PyObject *container,        /* Container string */
10317db96d56Sopenharmony_ci    PyObject *element           /* Element string */
10327db96d56Sopenharmony_ci    );
10337db96d56Sopenharmony_ci
10347db96d56Sopenharmony_ci/* Checks whether argument is a valid identifier. */
10357db96d56Sopenharmony_ci
10367db96d56Sopenharmony_ciPyAPI_FUNC(int) PyUnicode_IsIdentifier(PyObject *s);
10377db96d56Sopenharmony_ci
10387db96d56Sopenharmony_ci/* === Characters Type APIs =============================================== */
10397db96d56Sopenharmony_ci
10407db96d56Sopenharmony_ci#ifndef Py_LIMITED_API
10417db96d56Sopenharmony_ci#  define Py_CPYTHON_UNICODEOBJECT_H
10427db96d56Sopenharmony_ci#  include "cpython/unicodeobject.h"
10437db96d56Sopenharmony_ci#  undef Py_CPYTHON_UNICODEOBJECT_H
10447db96d56Sopenharmony_ci#endif
10457db96d56Sopenharmony_ci
10467db96d56Sopenharmony_ci#ifdef __cplusplus
10477db96d56Sopenharmony_ci}
10487db96d56Sopenharmony_ci#endif
10497db96d56Sopenharmony_ci#endif /* !Py_UNICODEOBJECT_H */
1050