Mailing List Archive

python/dist/src/Objects stringobject.c,2.155,2.156
Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv21002/Objects

Modified Files:
stringobject.c
Log Message:
Partially implement SF feature request 444708.

Add optional arg to string methods strip(), lstrip(), rstrip().
The optional arg specifies characters to delete.

Also for UserString.

Still to do:

- Misc/NEWS
- LaTeX docs (I did the docstrings though)
- Unicode methods, and Unicode support in the string methods.




Index: stringobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/stringobject.c,v
retrieving revision 2.155
retrieving revision 2.156
diff -C2 -d -r2.155 -r2.156
*** stringobject.c 12 Apr 2002 03:05:19 -0000 2.155
--- stringobject.c 13 Apr 2002 00:56:08 -0000 2.156
***************
*** 1003,1006 ****
--- 1003,1009 ----
#define BOTHSTRIP 2

+ /* Arrays indexed by above */
+ static const char *stripname[] = {"lstrip", "rstrip", "strip"};
+

static PyObject *
***************
*** 1378,1381 ****
--- 1381,1417 ----

static PyObject *
+ do_xstrip(PyStringObject *self, int striptype, PyObject *sepobj)
+ {
+ char *s = PyString_AS_STRING(self);
+ int len = PyString_GET_SIZE(self);
+ char *sep = PyString_AS_STRING(sepobj);
+ int seplen = PyString_GET_SIZE(sepobj);
+ int i, j;
+
+ i = 0;
+ if (striptype != RIGHTSTRIP) {
+ while (i < len && memchr(sep, Py_CHARMASK(s[i]), seplen)) {
+ i++;
+ }
+ }
+
+ j = len;
+ if (striptype != LEFTSTRIP) {
+ do {
+ j--;
+ } while (j >= i && memchr(sep, Py_CHARMASK(s[j]), seplen));
+ j++;
+ }
+
+ if (i == 0 && j == len && PyString_CheckExact(self)) {
+ Py_INCREF(self);
+ return (PyObject*)self;
+ }
+ else
+ return PyString_FromStringAndSize(s+i, j-i);
+ }
+
+
+ static PyObject *
do_strip(PyStringObject *self, int striptype)
{
***************
*** 1407,1444 ****


static char strip__doc__[] =
! "S.strip() -> string\n\
\n\
Return a copy of the string S with leading and trailing\n\
! whitespace removed.";

static PyObject *
! string_strip(PyStringObject *self)
{
! return do_strip(self, BOTHSTRIP);
}


static char lstrip__doc__[] =
! "S.lstrip() -> string\n\
\n\
! Return a copy of the string S with leading whitespace removed.";

static PyObject *
! string_lstrip(PyStringObject *self)
{
! return do_strip(self, LEFTSTRIP);
}


static char rstrip__doc__[] =
! "S.rstrip() -> string\n\
\n\
! Return a copy of the string S with trailing whitespace removed.";

static PyObject *
! string_rstrip(PyStringObject *self)
{
! return do_strip(self, RIGHTSTRIP);
}

--- 1443,1515 ----


+ static PyObject *
+ do_argstrip(PyStringObject *self, int striptype, PyObject *args)
+ {
+ PyObject *sep = NULL;
+
+ if (!PyArg_ParseTuple(args, "|O:[lr]strip", &sep))
+ return NULL;
+
+ if (sep != NULL && sep != Py_None) {
+ /* XXX What about Unicode? */
+ if (!PyString_Check(sep)) {
+ PyErr_Format(PyExc_TypeError,
+ "%s arg must be None or string",
+ stripname[striptype]);
+ return NULL;
+ }
+ return do_xstrip(self, striptype, sep);
+ }
+
+ return do_strip(self, striptype);
+ }
+
+
static char strip__doc__[] =
! "S.strip([sep]) -> string\n\
\n\
Return a copy of the string S with leading and trailing\n\
! whitespace removed.\n\
! If sep is given and not None, remove characters in sep instead.";

static PyObject *
! string_strip(PyStringObject *self, PyObject *args)
{
! if (PyTuple_GET_SIZE(args) == 0)
! return do_strip(self, BOTHSTRIP); /* Common case */
! else
! return do_argstrip(self, BOTHSTRIP, args);
}


static char lstrip__doc__[] =
! "S.lstrip([sep]) -> string\n\
\n\
! Return a copy of the string S with leading whitespace removed.\n\
! If sep is given and not None, remove characters in sep instead.";

static PyObject *
! string_lstrip(PyStringObject *self, PyObject *args)
{
! if (PyTuple_GET_SIZE(args) == 0)
! return do_strip(self, LEFTSTRIP); /* Common case */
! else
! return do_argstrip(self, LEFTSTRIP, args);
}


static char rstrip__doc__[] =
! "S.rstrip([sep]) -> string\n\
\n\
! Return a copy of the string S with trailing whitespace removed.\n\
! If sep is given and not None, remove characters in sep instead.";

static PyObject *
! string_rstrip(PyStringObject *self, PyObject *args)
{
! if (PyTuple_GET_SIZE(args) == 0)
! return do_strip(self, RIGHTSTRIP); /* Common case */
! else
! return do_argstrip(self, RIGHTSTRIP, args);
}

***************
*** 2645,2655 ****
{"find", (PyCFunction)string_find, METH_VARARGS, find__doc__},
{"index", (PyCFunction)string_index, METH_VARARGS, index__doc__},
! {"lstrip", (PyCFunction)string_lstrip, METH_NOARGS, lstrip__doc__},
{"replace", (PyCFunction)string_replace, METH_VARARGS, replace__doc__},
{"rfind", (PyCFunction)string_rfind, METH_VARARGS, rfind__doc__},
{"rindex", (PyCFunction)string_rindex, METH_VARARGS, rindex__doc__},
! {"rstrip", (PyCFunction)string_rstrip, METH_NOARGS, rstrip__doc__},
{"startswith", (PyCFunction)string_startswith, METH_VARARGS, startswith__doc__},
! {"strip", (PyCFunction)string_strip, METH_NOARGS, strip__doc__},
{"swapcase", (PyCFunction)string_swapcase, METH_NOARGS, swapcase__doc__},
{"translate", (PyCFunction)string_translate, METH_VARARGS, translate__doc__},
--- 2716,2726 ----
{"find", (PyCFunction)string_find, METH_VARARGS, find__doc__},
{"index", (PyCFunction)string_index, METH_VARARGS, index__doc__},
! {"lstrip", (PyCFunction)string_lstrip, METH_VARARGS, lstrip__doc__},
{"replace", (PyCFunction)string_replace, METH_VARARGS, replace__doc__},
{"rfind", (PyCFunction)string_rfind, METH_VARARGS, rfind__doc__},
{"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__},
Re: python/dist/src/Objects stringobject.c,2.155,2.156 [ In reply to ]
gvanrossum@sourceforge.net writes:
> Still to do:
...
> - LaTeX docs (I did the docstrings though)

These will be checked in shortly.


-Fred

--
Fred L. Drake, Jr. <fdrake at acm.org>
PythonLabs at Zope Corporation