mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Avoid forward-declaring the methods array.
Rename unicodedata.db* to unicodedata.ucd*
This commit is contained in:
		
							parent
							
								
									f669436189
								
							
						
					
					
						commit
						5bd7c02298
					
				
					 5 changed files with 57 additions and 56 deletions
				
			
		|  | @ -131,7 +131,7 @@ The version of the Unicode database used in this module. | |||
| \versionadded{2.3} | ||||
| \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 | ||||
| module, but uses the Unicode database version 3.2 instead, | ||||
| 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
 | ||||
|        success, zero if not.  Does not set Python exceptions.  | ||||
|        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); | ||||
| 
 | ||||
|     /* Get character code for a given name.  Same error handling
 | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| # This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep) | ||||
| 
 | ||||
| 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 | ||||
| dots = re.compile(u"[\u002E\u3002\uFF0E\uFF61]") | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ | |||
| 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' | ||||
| 
 | ||||
|  |  | |||
|  | @ -70,67 +70,20 @@ typedef struct previous_version { | |||
| 
 | ||||
| #define get_old_record(self, v)    ((((PreviousDBVersion*)self)->getrecord)(v)) | ||||
| 
 | ||||
| /* Forward declaration */ | ||||
| static PyMethodDef unicodedata_functions[]; | ||||
| 
 | ||||
| static PyMemberDef DB_members[] = { | ||||
| 	{"unidata_version", T_STRING, offsetof(PreviousDBVersion, name), READONLY}, | ||||
|         {NULL} | ||||
| }; | ||||
| 
 | ||||
| static PyTypeObject Xxo_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.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*/ | ||||
| }; | ||||
| // forward declaration
 | ||||
| static PyTypeObject UCD_Type; | ||||
| 
 | ||||
| static PyObject* | ||||
| new_previous_version(const char*name, const change_record* (*getrecord)(Py_UCS4), | ||||
|                      Py_UCS4 (*normalization)(Py_UCS4)) | ||||
| { | ||||
| 	PreviousDBVersion *self; | ||||
| 	self = PyObject_New(PreviousDBVersion, &Xxo_Type); | ||||
| 	self = PyObject_New(PreviousDBVersion, &UCD_Type); | ||||
| 	if (self == NULL) | ||||
| 		return NULL; | ||||
| 	self->name = name; | ||||
|  | @ -1163,7 +1116,52 @@ static PyMethodDef unicodedata_functions[] = { | |||
|     {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, | ||||
| "This module provides access to the Unicode Character Database which\n\
 | ||||
|  | @ -1180,17 +1178,20 @@ initunicodedata(void) | |||
| { | ||||
|     PyObject *m, *v; | ||||
| 
 | ||||
|     UCD_Type.ob_type = &PyType_Type; | ||||
| 
 | ||||
|     m = Py_InitModule3( | ||||
|         "unicodedata", unicodedata_functions, unicodedata_docstring); | ||||
|     if (!m) | ||||
|         return; | ||||
| 
 | ||||
|     PyModule_AddStringConstant(m, "unidata_version", UNIDATA_VERSION); | ||||
|     PyModule_AddObject(m, "UCD", (PyObject*)&UCD_Type); | ||||
| 
 | ||||
|     /* Previous versions */ | ||||
|     v = new_previous_version("3.2.0", get_change_3_2_0, normalization_3_2_0); | ||||
|     if (v != NULL) | ||||
|         PyModule_AddObject(m, "db_3_2_0", v); | ||||
|         PyModule_AddObject(m, "ucd_3_2_0", v); | ||||
| 
 | ||||
|     /* Export C API */ | ||||
|     v = PyCObject_FromVoidPtr((void *) &hashAPI, NULL); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Martin v. Löwis
						Martin v. Löwis