mirror of https://github.com/python/cpython.git
Avoid forward-declaring the methods array.
Rename unicodedata.db* to unicodedata.ucd*
This commit is contained in:
parent
f669436189
commit
5bd7c02298
|
@ -131,7 +131,7 @@ The version of the Unicode database used in this module.
|
||||||
\versionadded{2.3}
|
\versionadded{2.3}
|
||||||
\end{datadesc}
|
\end{datadesc}
|
||||||
|
|
||||||
\begin{datadesc}{db_3_2_0}
|
\begin{datadesc}{ucd_3_2_0}
|
||||||
This is an object that has the same methods as the entire
|
This is an object that has the same methods as the entire
|
||||||
module, but uses the Unicode database version 3.2 instead,
|
module, but uses the Unicode database version 3.2 instead,
|
||||||
for applications that require this specific version of
|
for applications that require this specific version of
|
||||||
|
|
|
@ -16,7 +16,7 @@ typedef struct {
|
||||||
/* Get name for a given character code. Returns non-zero if
|
/* Get name for a given character code. Returns non-zero if
|
||||||
success, zero if not. Does not set Python exceptions.
|
success, zero if not. Does not set Python exceptions.
|
||||||
If self is NULL, data come from the default version of the database.
|
If self is NULL, data come from the default version of the database.
|
||||||
If it is not NULL, it should be a unicodedata.db_X_Y_Z object */
|
If it is not NULL, it should be a unicodedata.ucd_X_Y_Z object */
|
||||||
int (*getname)(PyObject *self, Py_UCS4 code, char* buffer, int buflen);
|
int (*getname)(PyObject *self, Py_UCS4 code, char* buffer, int buflen);
|
||||||
|
|
||||||
/* Get character code for a given name. Same error handling
|
/* Get character code for a given name. Same error handling
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep)
|
# This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep)
|
||||||
|
|
||||||
import stringprep, re, codecs
|
import stringprep, re, codecs
|
||||||
from unicodedata import db_3_2_0 as unicodedata
|
from unicodedata import ucd_3_2_0 as unicodedata
|
||||||
|
|
||||||
# IDNA section 3.1
|
# IDNA section 3.1
|
||||||
dots = re.compile(u"[\u002E\u3002\uFF0E\uFF61]")
|
dots = re.compile(u"[\u002E\u3002\uFF0E\uFF61]")
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
and mappings, for which a mapping function is provided.
|
and mappings, for which a mapping function is provided.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from unicodedata import db_3_2_0 as unicodedata
|
from unicodedata import ucd_3_2_0 as unicodedata
|
||||||
|
|
||||||
assert unicodedata.unidata_version == '3.2.0'
|
assert unicodedata.unidata_version == '3.2.0'
|
||||||
|
|
||||||
|
|
|
@ -70,67 +70,20 @@ typedef struct previous_version {
|
||||||
|
|
||||||
#define get_old_record(self, v) ((((PreviousDBVersion*)self)->getrecord)(v))
|
#define get_old_record(self, v) ((((PreviousDBVersion*)self)->getrecord)(v))
|
||||||
|
|
||||||
/* Forward declaration */
|
|
||||||
static PyMethodDef unicodedata_functions[];
|
|
||||||
|
|
||||||
static PyMemberDef DB_members[] = {
|
static PyMemberDef DB_members[] = {
|
||||||
{"unidata_version", T_STRING, offsetof(PreviousDBVersion, name), READONLY},
|
{"unidata_version", T_STRING, offsetof(PreviousDBVersion, name), READONLY},
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyTypeObject Xxo_Type = {
|
// forward declaration
|
||||||
/* The ob_type field must be initialized in the module init function
|
static PyTypeObject UCD_Type;
|
||||||
* to be portable to Windows without using C++. */
|
|
||||||
PyObject_HEAD_INIT(NULL)
|
|
||||||
0, /*ob_size*/
|
|
||||||
"unicodedata.DB", /*tp_name*/
|
|
||||||
sizeof(PreviousDBVersion), /*tp_basicsize*/
|
|
||||||
0, /*tp_itemsize*/
|
|
||||||
/* methods */
|
|
||||||
(destructor)PyObject_Del, /*tp_dealloc*/
|
|
||||||
0, /*tp_print*/
|
|
||||||
0, /*tp_getattr*/
|
|
||||||
0, /*tp_setattr*/
|
|
||||||
0, /*tp_compare*/
|
|
||||||
0, /*tp_repr*/
|
|
||||||
0, /*tp_as_number*/
|
|
||||||
0, /*tp_as_sequence*/
|
|
||||||
0, /*tp_as_mapping*/
|
|
||||||
0, /*tp_hash*/
|
|
||||||
0, /*tp_call*/
|
|
||||||
0, /*tp_str*/
|
|
||||||
PyObject_GenericGetAttr,/*tp_getattro*/
|
|
||||||
0, /*tp_setattro*/
|
|
||||||
0, /*tp_as_buffer*/
|
|
||||||
Py_TPFLAGS_DEFAULT, /*tp_flags*/
|
|
||||||
0, /*tp_doc*/
|
|
||||||
0, /*tp_traverse*/
|
|
||||||
0, /*tp_clear*/
|
|
||||||
0, /*tp_richcompare*/
|
|
||||||
0, /*tp_weaklistoffset*/
|
|
||||||
0, /*tp_iter*/
|
|
||||||
0, /*tp_iternext*/
|
|
||||||
unicodedata_functions, /*tp_methods*/
|
|
||||||
DB_members, /*tp_members*/
|
|
||||||
0, /*tp_getset*/
|
|
||||||
0, /*tp_base*/
|
|
||||||
0, /*tp_dict*/
|
|
||||||
0, /*tp_descr_get*/
|
|
||||||
0, /*tp_descr_set*/
|
|
||||||
0, /*tp_dictoffset*/
|
|
||||||
0, /*tp_init*/
|
|
||||||
0, /*tp_alloc*/
|
|
||||||
0, /*tp_new*/
|
|
||||||
0, /*tp_free*/
|
|
||||||
0, /*tp_is_gc*/
|
|
||||||
};
|
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
new_previous_version(const char*name, const change_record* (*getrecord)(Py_UCS4),
|
new_previous_version(const char*name, const change_record* (*getrecord)(Py_UCS4),
|
||||||
Py_UCS4 (*normalization)(Py_UCS4))
|
Py_UCS4 (*normalization)(Py_UCS4))
|
||||||
{
|
{
|
||||||
PreviousDBVersion *self;
|
PreviousDBVersion *self;
|
||||||
self = PyObject_New(PreviousDBVersion, &Xxo_Type);
|
self = PyObject_New(PreviousDBVersion, &UCD_Type);
|
||||||
if (self == NULL)
|
if (self == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
self->name = name;
|
self->name = name;
|
||||||
|
@ -1163,7 +1116,52 @@ static PyMethodDef unicodedata_functions[] = {
|
||||||
{NULL, NULL} /* sentinel */
|
{NULL, NULL} /* sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static PyTypeObject UCD_Type = {
|
||||||
|
/* The ob_type field must be initialized in the module init function
|
||||||
|
* to be portable to Windows without using C++. */
|
||||||
|
PyObject_HEAD_INIT(NULL)
|
||||||
|
0, /*ob_size*/
|
||||||
|
"unicodedata.UCD", /*tp_name*/
|
||||||
|
sizeof(PreviousDBVersion), /*tp_basicsize*/
|
||||||
|
0, /*tp_itemsize*/
|
||||||
|
/* methods */
|
||||||
|
(destructor)PyObject_Del, /*tp_dealloc*/
|
||||||
|
0, /*tp_print*/
|
||||||
|
0, /*tp_getattr*/
|
||||||
|
0, /*tp_setattr*/
|
||||||
|
0, /*tp_compare*/
|
||||||
|
0, /*tp_repr*/
|
||||||
|
0, /*tp_as_number*/
|
||||||
|
0, /*tp_as_sequence*/
|
||||||
|
0, /*tp_as_mapping*/
|
||||||
|
0, /*tp_hash*/
|
||||||
|
0, /*tp_call*/
|
||||||
|
0, /*tp_str*/
|
||||||
|
PyObject_GenericGetAttr,/*tp_getattro*/
|
||||||
|
0, /*tp_setattro*/
|
||||||
|
0, /*tp_as_buffer*/
|
||||||
|
Py_TPFLAGS_DEFAULT, /*tp_flags*/
|
||||||
|
0, /*tp_doc*/
|
||||||
|
0, /*tp_traverse*/
|
||||||
|
0, /*tp_clear*/
|
||||||
|
0, /*tp_richcompare*/
|
||||||
|
0, /*tp_weaklistoffset*/
|
||||||
|
0, /*tp_iter*/
|
||||||
|
0, /*tp_iternext*/
|
||||||
|
unicodedata_functions, /*tp_methods*/
|
||||||
|
DB_members, /*tp_members*/
|
||||||
|
0, /*tp_getset*/
|
||||||
|
0, /*tp_base*/
|
||||||
|
0, /*tp_dict*/
|
||||||
|
0, /*tp_descr_get*/
|
||||||
|
0, /*tp_descr_set*/
|
||||||
|
0, /*tp_dictoffset*/
|
||||||
|
0, /*tp_init*/
|
||||||
|
0, /*tp_alloc*/
|
||||||
|
0, /*tp_new*/
|
||||||
|
0, /*tp_free*/
|
||||||
|
0, /*tp_is_gc*/
|
||||||
|
};
|
||||||
|
|
||||||
PyDoc_STRVAR(unicodedata_docstring,
|
PyDoc_STRVAR(unicodedata_docstring,
|
||||||
"This module provides access to the Unicode Character Database which\n\
|
"This module provides access to the Unicode Character Database which\n\
|
||||||
|
@ -1180,17 +1178,20 @@ initunicodedata(void)
|
||||||
{
|
{
|
||||||
PyObject *m, *v;
|
PyObject *m, *v;
|
||||||
|
|
||||||
|
UCD_Type.ob_type = &PyType_Type;
|
||||||
|
|
||||||
m = Py_InitModule3(
|
m = Py_InitModule3(
|
||||||
"unicodedata", unicodedata_functions, unicodedata_docstring);
|
"unicodedata", unicodedata_functions, unicodedata_docstring);
|
||||||
if (!m)
|
if (!m)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PyModule_AddStringConstant(m, "unidata_version", UNIDATA_VERSION);
|
PyModule_AddStringConstant(m, "unidata_version", UNIDATA_VERSION);
|
||||||
|
PyModule_AddObject(m, "UCD", (PyObject*)&UCD_Type);
|
||||||
|
|
||||||
/* Previous versions */
|
/* Previous versions */
|
||||||
v = new_previous_version("3.2.0", get_change_3_2_0, normalization_3_2_0);
|
v = new_previous_version("3.2.0", get_change_3_2_0, normalization_3_2_0);
|
||||||
if (v != NULL)
|
if (v != NULL)
|
||||||
PyModule_AddObject(m, "db_3_2_0", v);
|
PyModule_AddObject(m, "ucd_3_2_0", v);
|
||||||
|
|
||||||
/* Export C API */
|
/* Export C API */
|
||||||
v = PyCObject_FromVoidPtr((void *) &hashAPI, NULL);
|
v = PyCObject_FromVoidPtr((void *) &hashAPI, NULL);
|
||||||
|
|
Loading…
Reference in New Issue