]> granicus.if.org Git - python/commitdiff
Marc-Andre Lemburg:
authorGuido van Rossum <guido@python.org>
Tue, 11 Apr 2000 15:38:46 +0000 (15:38 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 11 Apr 2000 15:38:46 +0000 (15:38 +0000)
The maxsplit functionality in .splitlines() was replaced by the keepends
functionality which allows keeping the line end markers together
with the string.

Lib/UserString.py
Objects/unicodeobject.c

index c2c2bedf7d5cba7f86071060eedfbf3dcac0994b..528065e9299903d0d4ad1d5d3dff70231121af45 100755 (executable)
@@ -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())
index 4b99ad8607573006e9a1c3a6957e1728b534df4a..f10f9ab75697b9d6544763989b2c5de7851762bb 100644 (file)
@@ -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