17eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* ------------------------------------------------------------------------ 27eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 37eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel _codecs -- Provides access to the codec registry and the builtin 47eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel codecs. 57eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 67eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel This module should never be imported directly. The standard library 77eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel module "codecs" wraps this builtin module for use within Python. 87eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 97eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel The codec registry is accessible via: 107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel register(search_function) -> None 127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel lookup(encoding) -> CodecInfo object 147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel The builtin Unicode codecs use the following interface: 167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel <encoding>_encode(Unicode_object[,errors='strict']) -> 187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel (string object, bytes consumed) 197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel <encoding>_decode(char_buffer_obj[,errors='strict']) -> 217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel (Unicode object, bytes consumed) 227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel <encoding>_encode() interfaces also accept non-Unicode object as 247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel input. The objects are then converted to Unicode using 257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_FromObject() prior to applying the conversion. 267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel These <encoding>s are available: utf_8, unicode_escape, 287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel raw_unicode_escape, unicode_internal, latin_1, ascii (7-bit), 297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel mbcs (on win32). 307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielWritten by Marc-Andre Lemburg (mal@lemburg.com). 337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielCopyright (c) Corporation for National Research Initiatives. 357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel ------------------------------------------------------------------------ */ 377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#define PY_SSIZE_T_CLEAN 397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#include "Python.h" 407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* --- Registry ----------------------------------------------------------- */ 427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielPyDoc_STRVAR(register__doc__, 447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel"register(search_function)\n\ 457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel\n\ 467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielRegister a codec search function. Search functions are expected to take\n\ 477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielone argument, the encoding name in all lower case letters, and return\n\ 487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniela tuple of functions (encoder, decoder, stream_reader, stream_writer)\n\ 497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel(or a CodecInfo object)."); 507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic 527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielPyObject *codec_register(PyObject *self, PyObject *search_function) 537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (PyCodec_Register(search_function)) 557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_RETURN_NONE; 587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielPyDoc_STRVAR(lookup__doc__, 617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel"lookup(encoding) -> CodecInfo\n\ 627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel\n\ 637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielLooks up a codec tuple in the Python codec registry and returns\n\ 647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniela CodecInfo object."); 657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic 677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielPyObject *codec_lookup(PyObject *self, PyObject *args) 687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel char *encoding; 707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s:lookup", &encoding)) 727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return _PyCodec_Lookup(encoding); 757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielPyDoc_STRVAR(encode__doc__, 787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel"encode(obj, [encoding[,errors]]) -> object\n\ 797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel\n\ 807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielEncodes obj using the codec registered for encoding. encoding defaults\n\ 817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielto the default encoding. errors may be given to set a different error\n\ 827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielhandling scheme. Default is 'strict' meaning that encoding errors raise\n\ 837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniela ValueError. Other possible values are 'ignore', 'replace' and\n\ 847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel'xmlcharrefreplace' as well as any other name registered with\n\ 857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielcodecs.register_error that can handle ValueErrors."); 867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielcodec_encode(PyObject *self, PyObject *args) 897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *encoding = NULL; 917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *v; 937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|ss:encode", &v, &encoding, &errors)) 957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#ifdef Py_USING_UNICODE 987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (encoding == NULL) 997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel encoding = PyUnicode_GetDefaultEncoding(); 1007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#else 1017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (encoding == NULL) { 1027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyErr_SetString(PyExc_ValueError, "no encoding specified"); 1037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 1047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel } 1057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#endif 1067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel /* Encode via the codec registry */ 1087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return PyCodec_Encode(v, encoding, errors); 1097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 1107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielPyDoc_STRVAR(decode__doc__, 1127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel"decode(obj, [encoding[,errors]]) -> object\n\ 1137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel\n\ 1147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielDecodes obj using the codec registered for encoding. encoding defaults\n\ 1157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielto the default encoding. errors may be given to set a different error\n\ 1167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielhandling scheme. Default is 'strict' meaning that encoding errors raise\n\ 1177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniela ValueError. Other possible values are 'ignore' and 'replace'\n\ 1187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielas well as any other name registered with codecs.register_error that is\n\ 1197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielable to handle ValueErrors."); 1207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 1227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielcodec_decode(PyObject *self, PyObject *args) 1237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 1247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *encoding = NULL; 1257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 1267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *v; 1277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|ss:decode", &v, &encoding, &errors)) 1297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 1307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#ifdef Py_USING_UNICODE 1327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (encoding == NULL) 1337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel encoding = PyUnicode_GetDefaultEncoding(); 1347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#else 1357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (encoding == NULL) { 1367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyErr_SetString(PyExc_ValueError, "no encoding specified"); 1377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 1387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel } 1397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#endif 1407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel /* Decode via the codec registry */ 1427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return PyCodec_Decode(v, encoding, errors); 1437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 1447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* --- Helpers ------------------------------------------------------------ */ 1467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic 1487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielPyObject *codec_tuple(PyObject *unicode, 1497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t len) 1507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 1517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *v; 1527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (unicode == NULL) 1537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 1547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = Py_BuildValue("On", unicode, len); 1557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(unicode); 1567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 1577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 1587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* --- String codecs ------------------------------------------------------ */ 1607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 1617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielescape_decode(PyObject *self, 1627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 1637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 1647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 1657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *data; 1667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t size; 1677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s#|z:escape_decode", 1697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &data, &size, &errors)) 1707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 1717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(PyString_DecodeEscape(data, size, errors, 0, NULL), 1727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel size); 1737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 1747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 1767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielescape_encode(PyObject *self, 1777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 1787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 1797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str; 1807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 1817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel char *buf; 1827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed, len; 1837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "S|z:escape_encode", 1857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 1867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 1877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = PyString_GET_SIZE(str); 1897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyString_Repr(str, 0); 1907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!str) 1917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 1927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 1937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel /* The string will be quoted. Unquote, similar to unicode-escape. */ 1947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel buf = PyString_AS_STRING (str); 1957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel len = PyString_GET_SIZE (str); 1967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel memmove(buf, buf+1, len-2); 1977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (_PyString_Resize(&str, len-2) < 0) 1987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 1997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(str, consumed); 2017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 2027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#ifdef Py_USING_UNICODE 2047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* --- Decoder ------------------------------------------------------------ */ 2057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 2077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielunicode_internal_decode(PyObject *self, 2087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 2097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 2107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *obj; 2117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 2127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *data; 2137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t size; 2147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:unicode_internal_decode", 2167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &obj, &errors)) 2177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 2187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (PyUnicode_Check(obj)) { 2207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_INCREF(obj); 2217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(obj, PyUnicode_GET_SIZE(obj)); 2227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel } 2237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel else { 2247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (PyObject_AsReadBuffer(obj, (const void **)&data, &size)) 2257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 2267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(_PyUnicode_DecodeUnicodeInternal(data, size, errors), 2287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel size); 2297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel } 2307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 2317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 2337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_7_decode(PyObject *self, 2347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 2357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 2367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 2377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 2387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 2397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 2407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *decoded = NULL; 2417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zi:utf_7_decode", 2437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &final)) 2447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 2457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; 2467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel decoded = PyUnicode_DecodeUTF7Stateful(pbuf.buf, pbuf.len, errors, 2487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel final ? NULL : &consumed); 2497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 2507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (decoded == NULL) 2517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 2527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(decoded, consumed); 2537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 2547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 2567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_8_decode(PyObject *self, 2577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 2587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 2597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 2607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 2617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 2627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 2637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *decoded = NULL; 2647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zi:utf_8_decode", 2667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &final)) 2677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 2687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; 2697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel decoded = PyUnicode_DecodeUTF8Stateful(pbuf.buf, pbuf.len, errors, 2717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel final ? NULL : &consumed); 2727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 2737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (decoded == NULL) 2747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 2757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(decoded, consumed); 2767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 2777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 2797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_16_decode(PyObject *self, 2807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 2817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 2827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 2837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 2847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int byteorder = 0; 2857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 2867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 2877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *decoded; 2887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 2897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zi:utf_16_decode", 2907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &final)) 2917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 2927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; /* This is overwritten unless final is true. */ 2937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel decoded = PyUnicode_DecodeUTF16Stateful(pbuf.buf, pbuf.len, errors, 2947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &byteorder, final ? NULL : &consumed); 2957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 2967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (decoded == NULL) 2977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 2987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(decoded, consumed); 2997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 3007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 3027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_16_le_decode(PyObject *self, 3037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 3047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 3057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 3067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 3077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int byteorder = -1; 3087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 3097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 3107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *decoded = NULL; 3117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zi:utf_16_le_decode", 3137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &final)) 3147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 3157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; /* This is overwritten unless final is true. */ 3177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel decoded = PyUnicode_DecodeUTF16Stateful(pbuf.buf, pbuf.len, errors, 3187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &byteorder, final ? NULL : &consumed); 3197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 3207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (decoded == NULL) 3217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 3227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(decoded, consumed); 3237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 3247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 3267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_16_be_decode(PyObject *self, 3277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 3287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 3297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 3307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 3317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int byteorder = 1; 3327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 3337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 3347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *decoded = NULL; 3357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zi:utf_16_be_decode", 3377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &final)) 3387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 3397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; /* This is overwritten unless final is true. */ 3417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel decoded = PyUnicode_DecodeUTF16Stateful(pbuf.buf, pbuf.len, errors, 3427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &byteorder, final ? NULL : &consumed); 3437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 3447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (decoded == NULL) 3457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 3467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(decoded, consumed); 3477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 3487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* This non-standard version also provides access to the byteorder 3507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel parameter of the builtin UTF-16 codec. 3517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel It returns a tuple (unicode, bytesread, byteorder) with byteorder 3537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel being the value in effect at the end of data. 3547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel*/ 3567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 3587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_16_ex_decode(PyObject *self, 3597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 3607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 3617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 3627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 3637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int byteorder = 0; 3647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *unicode, *tuple; 3657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 3667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 3677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zii:utf_16_ex_decode", 3697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &byteorder, &final)) 3707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 3717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; /* This is overwritten unless final is true. */ 3727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel unicode = PyUnicode_DecodeUTF16Stateful(pbuf.buf, pbuf.len, errors, 3737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &byteorder, final ? NULL : &consumed); 3747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 3757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (unicode == NULL) 3767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 3777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel tuple = Py_BuildValue("Oni", unicode, consumed, byteorder); 3787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(unicode); 3797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return tuple; 3807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 3817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 3837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_32_decode(PyObject *self, 3847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 3857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 3867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 3877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 3887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int byteorder = 0; 3897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 3907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 3917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *decoded; 3927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 3937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zi:utf_32_decode", 3947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &final)) 3957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 3967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; /* This is overwritten unless final is true. */ 3977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel decoded = PyUnicode_DecodeUTF32Stateful(pbuf.buf, pbuf.len, errors, 3987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &byteorder, final ? NULL : &consumed); 3997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 4007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (decoded == NULL) 4017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 4027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(decoded, consumed); 4037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 4047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 4067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_32_le_decode(PyObject *self, 4077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 4087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 4097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 4107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 4117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int byteorder = -1; 4127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 4137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 4147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *decoded; 4157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zi:utf_32_le_decode", 4177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &final)) 4187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 4197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; /* This is overwritten unless final is true. */ 4207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel decoded = PyUnicode_DecodeUTF32Stateful(pbuf.buf, pbuf.len, errors, 4217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &byteorder, final ? NULL : &consumed); 4227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 4237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (decoded == NULL) 4247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 4257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(decoded, consumed); 4267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 4277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 4297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_32_be_decode(PyObject *self, 4307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 4317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 4327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 4337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 4347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int byteorder = 1; 4357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 4367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 4377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *decoded; 4387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zi:utf_32_be_decode", 4407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &final)) 4417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 4427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; /* This is overwritten unless final is true. */ 4437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel decoded = PyUnicode_DecodeUTF32Stateful(pbuf.buf, pbuf.len, errors, 4447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &byteorder, final ? NULL : &consumed); 4457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 4467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (decoded == NULL) 4477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 4487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(decoded, consumed); 4497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 4507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* This non-standard version also provides access to the byteorder 4527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel parameter of the builtin UTF-32 codec. 4537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel It returns a tuple (unicode, bytesread, byteorder) with byteorder 4557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel being the value in effect at the end of data. 4567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel*/ 4587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 4607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_32_ex_decode(PyObject *self, 4617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 4627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 4637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 4647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 4657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int byteorder = 0; 4667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *unicode, *tuple; 4677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 4687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 4697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zii:utf_32_ex_decode", 4717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &byteorder, &final)) 4727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 4737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; /* This is overwritten unless final is true. */ 4747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel unicode = PyUnicode_DecodeUTF32Stateful(pbuf.buf, pbuf.len, errors, 4757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &byteorder, final ? NULL : &consumed); 4767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 4777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (unicode == NULL) 4787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 4797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel tuple = Py_BuildValue("Oni", unicode, consumed, byteorder); 4807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(unicode); 4817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return tuple; 4827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 4837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 4857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielunicode_escape_decode(PyObject *self, 4867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 4877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 4887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 4897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 4907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *unicode; 4917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|z:unicode_escape_decode", 4937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors)) 4947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 4957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 4967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel unicode = PyUnicode_DecodeUnicodeEscape(pbuf.buf, pbuf.len, errors); 4977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 4987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(unicode, pbuf.len); 4997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 5007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 5027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielraw_unicode_escape_decode(PyObject *self, 5037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 5047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 5057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 5067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 5077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *unicode; 5087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|z:raw_unicode_escape_decode", 5107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors)) 5117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 5127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel unicode = PyUnicode_DecodeRawUnicodeEscape(pbuf.buf, pbuf.len, errors); 5147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 5157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(unicode, pbuf.len); 5167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 5177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 5197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniellatin_1_decode(PyObject *self, 5207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 5217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 5227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 5237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *unicode; 5247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 5257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|z:latin_1_decode", 5277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors)) 5287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 5297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel unicode = PyUnicode_DecodeLatin1(pbuf.buf, pbuf.len, errors); 5317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 5327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(unicode, pbuf.len); 5337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 5347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 5367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielascii_decode(PyObject *self, 5377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 5387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 5397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 5407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *unicode; 5417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 5427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|z:ascii_decode", 5447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors)) 5457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 5467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel unicode = PyUnicode_DecodeASCII(pbuf.buf, pbuf.len, errors); 5487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 5497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(unicode, pbuf.len); 5507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 5517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 5537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielcharmap_decode(PyObject *self, 5547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 5557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 5567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 5577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *unicode; 5587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 5597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *mapping = NULL; 5607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zO:charmap_decode", 5627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &mapping)) 5637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 5647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (mapping == Py_None) 5657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel mapping = NULL; 5667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel unicode = PyUnicode_DecodeCharmap(pbuf.buf, pbuf.len, mapping, errors); 5687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 5697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(unicode, pbuf.len); 5707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 5717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T) 5737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 5757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielmbcs_decode(PyObject *self, 5767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 5777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 5787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_buffer pbuf; 5797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 5807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int final = 0; 5817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t consumed; 5827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *decoded = NULL; 5837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s*|zi:mbcs_decode", 5857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &pbuf, &errors, &final)) 5867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 5877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel consumed = pbuf.len; 5887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel decoded = PyUnicode_DecodeMBCSStateful(pbuf.buf, pbuf.len, errors, 5907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel final ? NULL : &consumed); 5917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyBuffer_Release(&pbuf); 5927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (decoded == NULL) 5937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 5947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(decoded, consumed); 5957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 5967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#endif /* MS_WINDOWS */ 5987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 5997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* --- Encoder ------------------------------------------------------------ */ 6007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 6027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielreadbuffer_encode(PyObject *self, 6037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 6047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 6057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *data; 6067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t size; 6077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 6087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s#|z:readbuffer_encode", 6107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &data, &size, &errors)) 6117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 6127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(PyString_FromStringAndSize(data, size), 6147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel size); 6157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 6167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 6187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielcharbuffer_encode(PyObject *self, 6197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 6207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 6217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *data; 6227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t size; 6237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 6247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "t#|z:charbuffer_encode", 6267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &data, &size, &errors)) 6277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 6287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(PyString_FromStringAndSize(data, size), 6307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel size); 6317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 6327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 6347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielunicode_internal_encode(PyObject *self, 6357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 6367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 6377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *obj; 6387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 6397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *data; 6407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_ssize_t size; 6417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:unicode_internal_encode", 6437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &obj, &errors)) 6447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 6457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (PyUnicode_Check(obj)) { 6477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel data = PyUnicode_AS_DATA(obj); 6487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel size = PyUnicode_GET_DATA_SIZE(obj); 6497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(PyString_FromStringAndSize(data, size), 6507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(obj)); 6517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel } 6527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel else { 6537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (PyObject_AsReadBuffer(obj, (const void **)&data, &size)) 6547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 6557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return codec_tuple(PyString_FromStringAndSize(data, size), 6567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel size); 6577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel } 6587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 6597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 6617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_7_encode(PyObject *self, 6627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 6637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 6647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 6657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 6667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:utf_7_encode", 6687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 6697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 6707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 6727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 6737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 6747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeUTF7(PyUnicode_AS_UNICODE(str), 6757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 6767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 0, 6777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 0, 6787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors), 6797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 6807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 6817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 6827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 6837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 6857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_8_encode(PyObject *self, 6867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 6877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 6887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 6897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 6907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:utf_8_encode", 6927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 6937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 6947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 6957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 6967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 6977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 6987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(str), 6997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 7007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors), 7017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 7027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 7037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 7047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 7057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* This version provides access to the byteorder parameter of the 7077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel builtin UTF-16 codecs as optional third argument. It defaults to 0 7087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel which means: use the native byte order and prepend the data with a 7097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel BOM mark. 7107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel*/ 7127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 7147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_16_encode(PyObject *self, 7157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 7167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 7177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 7187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 7197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int byteorder = 0; 7207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|zi:utf_16_encode", 7227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors, &byteorder)) 7237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 7247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 7267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 7277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 7287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeUTF16(PyUnicode_AS_UNICODE(str), 7297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 7307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors, 7317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel byteorder), 7327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 7337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 7347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 7357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 7367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 7387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_16_le_encode(PyObject *self, 7397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 7407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 7417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 7427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 7437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:utf_16_le_encode", 7457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 7467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 7477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 7497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 7507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 7517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeUTF16(PyUnicode_AS_UNICODE(str), 7527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 7537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors, 7547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel -1), 7557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 7567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 7577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 7587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 7597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 7617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_16_be_encode(PyObject *self, 7627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 7637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 7647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 7657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 7667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:utf_16_be_encode", 7687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 7697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 7707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 7727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 7737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 7747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeUTF16(PyUnicode_AS_UNICODE(str), 7757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 7767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors, 7777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel +1), 7787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 7797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 7807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 7817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 7827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* This version provides access to the byteorder parameter of the 7847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel builtin UTF-32 codecs as optional third argument. It defaults to 0 7857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel which means: use the native byte order and prepend the data with a 7867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel BOM mark. 7877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel*/ 7897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 7917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_32_encode(PyObject *self, 7927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 7937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 7947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 7957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 7967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel int byteorder = 0; 7977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 7987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|zi:utf_32_encode", 7997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors, &byteorder)) 8007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 8017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 8037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 8047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 8057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeUTF32(PyUnicode_AS_UNICODE(str), 8067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 8077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors, 8087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel byteorder), 8097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 8107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 8117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 8127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 8137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 8157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_32_le_encode(PyObject *self, 8167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 8177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 8187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 8197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 8207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:utf_32_le_encode", 8227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 8237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 8247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 8267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 8277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 8287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeUTF32(PyUnicode_AS_UNICODE(str), 8297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 8307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors, 8317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel -1), 8327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 8337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 8347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 8357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 8367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 8387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielutf_32_be_encode(PyObject *self, 8397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 8407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 8417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 8427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 8437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:utf_32_be_encode", 8457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 8467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 8477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 8497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 8507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 8517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeUTF32(PyUnicode_AS_UNICODE(str), 8527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 8537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors, 8547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel +1), 8557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 8567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 8577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 8587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 8597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 8617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielunicode_escape_encode(PyObject *self, 8627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 8637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 8647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 8657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 8667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:unicode_escape_encode", 8687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 8697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 8707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 8727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 8737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 8747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeUnicodeEscape(PyUnicode_AS_UNICODE(str), 8757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)), 8767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 8777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 8787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 8797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 8807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 8827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielraw_unicode_escape_encode(PyObject *self, 8837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 8847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 8857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 8867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 8877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:raw_unicode_escape_encode", 8897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 8907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 8917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 8927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 8937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 8947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 8957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeRawUnicodeEscape( 8967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_AS_UNICODE(str), 8977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)), 8987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 8997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 9007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 9017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 9027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 9047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniellatin_1_encode(PyObject *self, 9057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 9067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 9077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 9087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 9097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:latin_1_encode", 9117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 9127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 9137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 9157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 9167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 9177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeLatin1( 9187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_AS_UNICODE(str), 9197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 9207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors), 9217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 9227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 9237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 9247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 9257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 9277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielascii_encode(PyObject *self, 9287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 9297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 9307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 9317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 9327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:ascii_encode", 9347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 9357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 9367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 9387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 9397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 9407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeASCII( 9417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_AS_UNICODE(str), 9427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 9437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors), 9447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 9457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 9467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 9477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 9487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 9507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielcharmap_encode(PyObject *self, 9517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 9527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 9537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 9547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 9557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *mapping = NULL; 9567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|zO:charmap_encode", 9587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors, &mapping)) 9597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 9607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (mapping == Py_None) 9617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel mapping = NULL; 9627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 9647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 9657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 9667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeCharmap( 9677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_AS_UNICODE(str), 9687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 9697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel mapping, 9707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors), 9717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 9727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 9737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 9747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 9757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject* 9777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielcharmap_build(PyObject *self, PyObject *args) 9787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 9797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *map; 9807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "U:charmap_build", &map)) 9817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 9827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return PyUnicode_BuildEncodingMap(map); 9837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 9847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T) 9867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject * 9887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielmbcs_encode(PyObject *self, 9897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *args) 9907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 9917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *str, *v; 9927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *errors = NULL; 9937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "O|z:mbcs_encode", 9957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &str, &errors)) 9967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 9977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 9987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel str = PyUnicode_FromObject(str); 9997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (str == NULL) 10007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 10017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel v = codec_tuple(PyUnicode_EncodeMBCS( 10027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_AS_UNICODE(str), 10037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str), 10047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel errors), 10057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyUnicode_GET_SIZE(str)); 10067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_DECREF(str); 10077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return v; 10087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 10097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 10107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#endif /* MS_WINDOWS */ 10117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#endif /* Py_USING_UNICODE */ 10127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 10137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* --- Error handler registry --------------------------------------------- */ 10147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 10157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielPyDoc_STRVAR(register_error__doc__, 10167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel"register_error(errors, handler)\n\ 10177eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel\n\ 10187eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielRegister the specified error handler under the name\n\ 10197eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielerrors. handler must be a callable object, that\n\ 10207eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielwill be called with an exception instance containing\n\ 10217eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielinformation about the location of the encoding/decoding\n\ 10227eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielerror and must return a (replacement, new position) tuple."); 10237eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 10247eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject *register_error(PyObject *self, PyObject *args) 10257eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 10267eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *name; 10277eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel PyObject *handler; 10287eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 10297eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "sO:register_error", 10307eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &name, &handler)) 10317eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 10327eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (PyCodec_RegisterError(name, handler)) 10337eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 10347eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_RETURN_NONE; 10357eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 10367eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 10377eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielPyDoc_STRVAR(lookup_error__doc__, 10387eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel"lookup_error(errors) -> handler\n\ 10397eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel\n\ 10407eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielReturn the error handler for the specified error handling name\n\ 10417eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielor raise a LookupError, if no handler exists under this name."); 10427eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 10437eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyObject *lookup_error(PyObject *self, PyObject *args) 10447eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 10457eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel const char *name; 10467eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 10477eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel if (!PyArg_ParseTuple(args, "s:lookup_error", 10487eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel &name)) 10497eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return NULL; 10507eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel return PyCodec_LookupError(name); 10517eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 10527eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 10537eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel/* --- Module API --------------------------------------------------------- */ 10547eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 10557eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielstatic PyMethodDef _codecs_functions[] = { 10567eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"register", codec_register, METH_O, 10577eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel register__doc__}, 10587eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"lookup", codec_lookup, METH_VARARGS, 10597eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel lookup__doc__}, 10607eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"encode", codec_encode, METH_VARARGS, 10617eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel encode__doc__}, 10627eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"decode", codec_decode, METH_VARARGS, 10637eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel decode__doc__}, 10647eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"escape_encode", escape_encode, METH_VARARGS}, 10657eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"escape_decode", escape_decode, METH_VARARGS}, 10667eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#ifdef Py_USING_UNICODE 10677eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_8_encode", utf_8_encode, METH_VARARGS}, 10687eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_8_decode", utf_8_decode, METH_VARARGS}, 10697eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_7_encode", utf_7_encode, METH_VARARGS}, 10707eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_7_decode", utf_7_decode, METH_VARARGS}, 10717eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_16_encode", utf_16_encode, METH_VARARGS}, 10727eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_16_le_encode", utf_16_le_encode, METH_VARARGS}, 10737eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_16_be_encode", utf_16_be_encode, METH_VARARGS}, 10747eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_16_decode", utf_16_decode, METH_VARARGS}, 10757eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_16_le_decode", utf_16_le_decode, METH_VARARGS}, 10767eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_16_be_decode", utf_16_be_decode, METH_VARARGS}, 10777eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_16_ex_decode", utf_16_ex_decode, METH_VARARGS}, 10787eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_32_encode", utf_32_encode, METH_VARARGS}, 10797eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_32_le_encode", utf_32_le_encode, METH_VARARGS}, 10807eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_32_be_encode", utf_32_be_encode, METH_VARARGS}, 10817eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_32_decode", utf_32_decode, METH_VARARGS}, 10827eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_32_le_decode", utf_32_le_decode, METH_VARARGS}, 10837eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_32_be_decode", utf_32_be_decode, METH_VARARGS}, 10847eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"utf_32_ex_decode", utf_32_ex_decode, METH_VARARGS}, 10857eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"unicode_escape_encode", unicode_escape_encode, METH_VARARGS}, 10867eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"unicode_escape_decode", unicode_escape_decode, METH_VARARGS}, 10877eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"unicode_internal_encode", unicode_internal_encode, METH_VARARGS}, 10887eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"unicode_internal_decode", unicode_internal_decode, METH_VARARGS}, 10897eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"raw_unicode_escape_encode", raw_unicode_escape_encode, METH_VARARGS}, 10907eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"raw_unicode_escape_decode", raw_unicode_escape_decode, METH_VARARGS}, 10917eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"latin_1_encode", latin_1_encode, METH_VARARGS}, 10927eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"latin_1_decode", latin_1_decode, METH_VARARGS}, 10937eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"ascii_encode", ascii_encode, METH_VARARGS}, 10947eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"ascii_decode", ascii_decode, METH_VARARGS}, 10957eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"charmap_encode", charmap_encode, METH_VARARGS}, 10967eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"charmap_decode", charmap_decode, METH_VARARGS}, 10977eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"charmap_build", charmap_build, METH_VARARGS}, 10987eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"readbuffer_encode", readbuffer_encode, METH_VARARGS}, 10997eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"charbuffer_encode", charbuffer_encode, METH_VARARGS}, 11007eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T) 11017eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"mbcs_encode", mbcs_encode, METH_VARARGS}, 11027eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"mbcs_decode", mbcs_decode, METH_VARARGS}, 11037eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#endif 11047eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel#endif /* Py_USING_UNICODE */ 11057eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"register_error", register_error, METH_VARARGS, 11067eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel register_error__doc__}, 11077eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {"lookup_error", lookup_error, METH_VARARGS, 11087eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel lookup_error__doc__}, 11097eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel {NULL, NULL} /* sentinel */ 11107eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel}; 11117eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel 11127eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielPyMODINIT_FUNC 11137eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDanielinit_codecs(void) 11147eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel{ 11157eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel Py_InitModule("_codecs", _codecs_functions); 11167eb75bccb5dacb658c63db1a9a980950c3d54d42Daryl McDaniel} 1117