[Python-checkins] python/dist/src/Objects stringobject.c,2.147.6.1,2.147.6.2 unicodeobject.c,2.124.6.6,2.124.6.7

doerwalter@sourceforge.net doerwalter@sourceforge.net
2002年4月22日 04:57:08 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv17892/Objects
Modified Files:
 Tag: release22-maint
	stringobject.c unicodeobject.c 
Log Message:
Backport the following changes:
Misc/NEWS 1.387->1.388
Lib/test/string_tests.py 1.10->1.11, 1.12->1.14, 
Lib/test/test_unicode.py 1.50->1.51, 1.53->1.54, 1.55->1.56
Lib/test/test_string.py 1.15->1.16
Lib/string.py 1.61->1.63
Lib/test/test_userstring.py 1.5->1.6, 1.11, 1.12
Objects/stringobject.c 2.156->2.159
Objects/unicodeobject.c 2.137->2.139
Doc/lib/libstdtypes.tec 1.87->1.88
Add a method zfill to str, unicode and UserString 
and change Lib/string.py accordingly 
(see SF patch http://www.python.org/sf/536241)
This also adds Guido's fix to test_userstring.py
and the subinstance checks in test_string.py
and test_unicode.py.
Index: stringobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/stringobject.c,v
retrieving revision 2.147.6.1
retrieving revision 2.147.6.2
diff -C2 -d -r2.147.6.1 -r2.147.6.2
*** stringobject.c	18 Apr 2002 05:16:37 -0000	2.147.6.1
--- stringobject.c	22 Apr 2002 11:57:05 -0000	2.147.6.2
***************
*** 1,3 ****
- 
 /* String object implementation */
 
--- 1,2 ----
***************
*** 606,610 ****
 	/* figure out which quote to use; single is preferred */
 	quote = '\'';
! 	if (strchr(op->ob_sval, '\'') && !strchr(op->ob_sval, '"'))
 		quote = '"';
 
--- 605,610 ----
 	/* figure out which quote to use; single is preferred */
 	quote = '\'';
! 	if (strchr(op->ob_sval, '\'') &&
! 	 !strchr(op->ob_sval, '"'))
 		quote = '"';
 
***************
*** 650,654 ****
 		/* figure out which quote to use; single is preferred */
 		quote = '\'';
! 		if (strchr(op->ob_sval, '\'') && !strchr(op->ob_sval, '"'))
 			quote = '"';
 
--- 650,655 ----
 		/* figure out which quote to use; single is preferred */
 		quote = '\'';
! 		if (strchr(op->ob_sval, '\'') &&
! 		 !strchr(op->ob_sval, '"'))
 			quote = '"';
 
***************
*** 2415,2418 ****
--- 2416,2465 ----
 }
 
+ static char zfill__doc__[] =
+ "S.zfill(width) -> string\n"
+ "\n"
+ "Pad a numeric string S with zeros on the left, to fill a field\n"
+ "of the specified width. The string S is never truncated.";
+ 
+ static PyObject *
+ string_zfill(PyStringObject *self, PyObject *args)
+ {
+ int fill;
+ PyObject *s;
+ char *p;
+ 
+ int width;
+ if (!PyArg_ParseTuple(args, "i:zfill", &width))
+ return NULL;
+ 
+ if (PyString_GET_SIZE(self) >= width) {
+ if (PyString_CheckExact(self)) {
+ Py_INCREF(self);
+ return (PyObject*) self;
+ }
+ else
+ return PyString_FromStringAndSize(
+ PyString_AS_STRING(self),
+ PyString_GET_SIZE(self)
+ );
+ }
+ 
+ fill = width - PyString_GET_SIZE(self);
+ 
+ s = pad(self, fill, 0, '0');
+ 
+ if (s == NULL)
+ return NULL;
+ 
+ p = PyString_AS_STRING(s);
+ if (p[fill] == '+' || p[fill] == '-') {
+ /* move sign to beginning of string */
+ p[0] = p[fill];
+ p[fill] = '0';
+ }
+ 
+ return (PyObject*) s;
+ }
+ 
 static char isspace__doc__[] =
 "S.isspace() -> int\n"
***************
*** 2744,2750 ****
 	{"isalpha", (PyCFunction)string_isalpha, METH_NOARGS, isalpha__doc__},
 	{"isalnum", (PyCFunction)string_isalnum, METH_NOARGS, isalnum__doc__},
! 	{"capitalize", (PyCFunction)string_capitalize, METH_NOARGS, capitalize__doc__},
 	{"count", (PyCFunction)string_count, METH_VARARGS, count__doc__},
! 	{"endswith", (PyCFunction)string_endswith, METH_VARARGS, endswith__doc__},
 	{"find", (PyCFunction)string_find, METH_VARARGS, find__doc__},
 	{"index", (PyCFunction)string_index, METH_VARARGS, index__doc__},
--- 2791,2799 ----
 	{"isalpha", (PyCFunction)string_isalpha, METH_NOARGS, isalpha__doc__},
 	{"isalnum", (PyCFunction)string_isalnum, METH_NOARGS, isalnum__doc__},
! 	{"capitalize", (PyCFunction)string_capitalize, METH_NOARGS,
! 	 capitalize__doc__},
 	{"count", (PyCFunction)string_count, METH_VARARGS, count__doc__},
! 	{"endswith", (PyCFunction)string_endswith, METH_VARARGS,
! 	 endswith__doc__},
 	{"find", (PyCFunction)string_find, METH_VARARGS, find__doc__},
 	{"index", (PyCFunction)string_index, METH_VARARGS, index__doc__},
***************
*** 2754,2772 ****
 	{"rindex", (PyCFunction)string_rindex, METH_VARARGS, rindex__doc__},
 	{"rstrip", (PyCFunction)string_rstrip, METH_VARARGS, rstrip__doc__},
! 	{"startswith", (PyCFunction)string_startswith, METH_VARARGS, startswith__doc__},
 	{"strip", (PyCFunction)string_strip, METH_VARARGS, strip__doc__},
! 	{"swapcase", (PyCFunction)string_swapcase, METH_NOARGS, swapcase__doc__},
! 	{"translate", (PyCFunction)string_translate, METH_VARARGS, translate__doc__},
 	{"title", (PyCFunction)string_title, METH_NOARGS, title__doc__},
 	{"ljust", (PyCFunction)string_ljust, METH_VARARGS, ljust__doc__},
 	{"rjust", (PyCFunction)string_rjust, METH_VARARGS, rjust__doc__},
 	{"center", (PyCFunction)string_center, METH_VARARGS, center__doc__},
 	{"encode", (PyCFunction)string_encode, METH_VARARGS, encode__doc__},
 	{"decode", (PyCFunction)string_decode, METH_VARARGS, decode__doc__},
! 	{"expandtabs", (PyCFunction)string_expandtabs, METH_VARARGS, expandtabs__doc__},
! 	{"splitlines", (PyCFunction)string_splitlines, METH_VARARGS, splitlines__doc__},
! #if 0
! 	{"zfill", (PyCFunction)string_zfill, METH_VARARGS, zfill__doc__},
! #endif
 	{NULL, NULL}		 /* sentinel */
 };
--- 2803,2824 ----
 	{"rindex", (PyCFunction)string_rindex, METH_VARARGS, rindex__doc__},
 	{"rstrip", (PyCFunction)string_rstrip, METH_VARARGS, rstrip__doc__},
! 	{"startswith", (PyCFunction)string_startswith, METH_VARARGS,
! 	 startswith__doc__},
 	{"strip", (PyCFunction)string_strip, METH_VARARGS, strip__doc__},
! 	{"swapcase", (PyCFunction)string_swapcase, METH_NOARGS,
! 	 swapcase__doc__},
! 	{"translate", (PyCFunction)string_translate, METH_VARARGS,
! 	 translate__doc__},
 	{"title", (PyCFunction)string_title, METH_NOARGS, title__doc__},
 	{"ljust", (PyCFunction)string_ljust, METH_VARARGS, ljust__doc__},
 	{"rjust", (PyCFunction)string_rjust, METH_VARARGS, rjust__doc__},
 	{"center", (PyCFunction)string_center, METH_VARARGS, center__doc__},
+ 	{"zfill", (PyCFunction)string_zfill, METH_VARARGS, zfill__doc__},
 	{"encode", (PyCFunction)string_encode, METH_VARARGS, encode__doc__},
 	{"decode", (PyCFunction)string_decode, METH_VARARGS, decode__doc__},
! 	{"expandtabs", (PyCFunction)string_expandtabs, METH_VARARGS,
! 	 expandtabs__doc__},
! 	{"splitlines", (PyCFunction)string_splitlines, METH_VARARGS,
! 	 splitlines__doc__},
 	{NULL, NULL}		 /* sentinel */
 };
***************
*** 3263,3267 ****
 			int sign;
 			int len;
! 			char formatbuf[FORMATBUFLEN]; /* For format{float,int,char}() */
 #ifdef Py_USING_UNICODE
 			char *fmt_start = fmt;
--- 3315,3320 ----
 			int sign;
 			int len;
! 			char formatbuf[FORMATBUFLEN];
! 			 /* For format{float,int,char}() */
 #ifdef Py_USING_UNICODE
 			char *fmt_start = fmt;
***************
*** 3461,3465 ****
 				else {
 					pbuf = formatbuf;
! 					len = formatint(pbuf, sizeof(formatbuf),
 							flags, prec, c, v);
 					if (len < 0)
--- 3514,3519 ----
 				else {
 					pbuf = formatbuf;
! 					len = formatint(pbuf,
! 							sizeof(formatbuf),
 							flags, prec, c, v);
 					if (len < 0)
***************
*** 3477,3481 ****
 			case 'G':
 				pbuf = formatbuf;
! 				len = formatfloat(pbuf, sizeof(formatbuf), flags, prec, c, v);
 				if (len < 0)
 					goto error;
--- 3531,3536 ----
 			case 'G':
 				pbuf = formatbuf;
! 				len = formatfloat(pbuf, sizeof(formatbuf),
! 					 flags, prec, c, v);
 				if (len < 0)
 					goto error;
Index: unicodeobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/unicodeobject.c,v
retrieving revision 2.124.6.6
retrieving revision 2.124.6.7
diff -C2 -d -r2.124.6.6 -r2.124.6.7
*** unicodeobject.c	18 Mar 2002 12:47:52 -0000	2.124.6.6
--- unicodeobject.c	22 Apr 2002 11:57:06 -0000	2.124.6.7
***************
*** 4811,4815 ****
 }
 
- #if 0
 static char zfill__doc__[] =
 "S.zfill(width) -> unicode\n\
--- 4811,4814 ----
***************
*** 4829,4834 ****
 
 if (self->length >= width) {
! Py_INCREF(self);
! return (PyObject*) self;
 }
 
--- 4828,4840 ----
 
 if (self->length >= width) {
! if (PyUnicode_CheckExact(self)) {
! Py_INCREF(self);
! return (PyObject*) self;
! }
! else
! return PyUnicode_FromUnicode(
! PyUnicode_AS_UNICODE(self),
! PyUnicode_GET_SIZE(self)
! );
 }
 
***************
*** 4837,4840 ****
--- 4843,4849 ----
 u = pad(self, fill, 0, '0');
 
+ if (u == NULL)
+ return NULL;
+ 
 if (u->str[fill] == '+' || u->str[fill] == '-') {
 /* move sign to beginning of string */
***************
*** 4845,4849 ****
 return (PyObject*) u;
 }
- #endif
 
 #if 0
--- 4854,4857 ----
***************
*** 4957,4962 ****
 {"isalpha", (PyCFunction) unicode_isalpha, METH_NOARGS, isalpha__doc__},
 {"isalnum", (PyCFunction) unicode_isalnum, METH_NOARGS, isalnum__doc__},
- #if 0
 {"zfill", (PyCFunction) unicode_zfill, METH_VARARGS, zfill__doc__},
 {"capwords", (PyCFunction) unicode_capwords, METH_NOARGS, capwords__doc__},
 #endif
--- 4965,4970 ----
 {"isalpha", (PyCFunction) unicode_isalpha, METH_NOARGS, isalpha__doc__},
 {"isalnum", (PyCFunction) unicode_isalnum, METH_NOARGS, isalnum__doc__},
 {"zfill", (PyCFunction) unicode_zfill, METH_VARARGS, zfill__doc__},
+ #if 0
 {"capwords", (PyCFunction) unicode_capwords, METH_NOARGS, capwords__doc__},
 #endif

AltStyle によって変換されたページ (->オリジナル) /