summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xLib/UserString.py2
-rw-r--r--Objects/unicodeobject.c26
2 files changed, 14 insertions, 14 deletions
diff --git a/Lib/UserString.py b/Lib/UserString.py
index c2c2bed..528065e 100755
--- a/Lib/UserString.py
+++ b/Lib/UserString.py
@@ -96,7 +96,7 @@ class UserString:
def rstrip(self): return self.__class__(self.data.rstrip())
def split(self, sep=None, maxsplit=-1):
return self.data.split(sep, maxsplit)
- def splitlines(self, maxsplit=-1): return self.data.splitlines(maxsplit)
+ def splitlines(self, keepends=0): return self.data.splitlines(keepends)
def startswith(self, prefix, start=0, end=sys.maxint):
return self.data.startswith(prefix, start, end)
def strip(self): return self.__class__(self.data.strip())
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 4b99ad8..f10f9ab 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -2516,7 +2516,7 @@ PyObject *split_whitespace(PyUnicodeObject *self,
}
PyObject *PyUnicode_Splitlines(PyObject *string,
- int maxcount)
+ int keepends)
{
register int i;
register int j;
@@ -2531,29 +2531,29 @@ PyObject *PyUnicode_Splitlines(PyObject *string,
data = PyUnicode_AS_UNICODE(string);
len = PyUnicode_GET_SIZE(string);
- if (maxcount < 0)
- maxcount = INT_MAX;
-
list = PyList_New(0);
if (!list)
goto onError;
for (i = j = 0; i < len; ) {
+ int eol;
+
/* Find a line and append it */
while (i < len && !Py_UNICODE_ISLINEBREAK(data[i]))
i++;
- if (maxcount-- <= 0)
- break;
- SPLIT_APPEND(data, j, i);
/* Skip the line break reading CRLF as one line break */
+ eol = i;
if (i < len) {
if (data[i] == '\r' && i + 1 < len &&
data[i+1] == '\n')
i += 2;
else
i++;
+ if (keepends)
+ eol = i;
}
+ SPLIT_APPEND(data, j, eol);
j = i;
}
if (j < len) {
@@ -3785,21 +3785,21 @@ unicode_split(PyUnicodeObject *self, PyObject *args)
}
static char splitlines__doc__[] =
-"S.splitlines([maxsplit]]) -> list of strings\n\
+"S.splitlines([keepends]]) -> list of strings\n\
\n\
Return a list of the lines in S, breaking at line boundaries.\n\
-If maxsplit is given, at most maxsplit are done. Line breaks are not\n\
-included in the resulting list.";
+Line breaks are not included in the resulting list unless keepends\n\
+is given and true.";
static PyObject*
unicode_splitlines(PyUnicodeObject *self, PyObject *args)
{
- int maxcount = -1;
+ int keepends = 0;
- if (!PyArg_ParseTuple(args, "|i:splitlines", &maxcount))
+ if (!PyArg_ParseTuple(args, "|i:splitlines", &keepends))
return NULL;
- return PyUnicode_Splitlines((PyObject *)self, maxcount);
+ return PyUnicode_Splitlines((PyObject *)self, keepends);
}
static