[Python-checkins] cpython (merge 3.5 -> default): Issue #22413: Merge StringIO doc from 3.5

martin.panter python-checkins at python.org
Sat Oct 10 06:31:27 EDT 2015


https://hg.python.org/cpython/rev/c12d3f941731
changeset: 98641:c12d3f941731
parent: 98635:cb574ee7231e
parent: 98640:46df76819b79
user: Martin Panter <vadmium+py at gmail.com>
date: Sat Oct 10 10:20:25 2015 +0000
summary:
 Issue #22413: Merge StringIO doc from 3.5
files:
 Doc/library/io.rst | 16 ++++++++++++----
 Modules/_io/_iomodule.h | 7 ++++++-
 Modules/_io/stringio.c | 6 ++----
 3 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/Doc/library/io.rst b/Doc/library/io.rst
--- a/Doc/library/io.rst
+++ b/Doc/library/io.rst
@@ -889,10 +889,16 @@
 An in-memory stream for text I/O. The text buffer is discarded when the
 :meth:`~IOBase.close` method is called.
 
- The initial value of the buffer (an empty string by default) can be set by
- providing *initial_value*. The *newline* argument works like that of
- :class:`TextIOWrapper`. The default is to consider only ``\n`` characters
- as end of lines and to do no newline translation.
+ The initial value of the buffer can be set by providing *initial_value*.
+ If newline translation is enabled, newlines will be encoded as if by
+ :meth:`~TextIOBase.write`. The stream is positioned at the start of
+ the buffer.
+
+ The *newline* argument works like that of :class:`TextIOWrapper`.
+ The default is to consider only ``\n`` characters as ends of lines and
+ to do no newline translation. If *newline* is set to ``None``,
+ newlines are written as ``\n`` on all platforms, but universal
+ newline decoding is still performed when reading.
 
 :class:`StringIO` provides this method in addition to those from
 :class:`TextIOBase` and its parents:
@@ -900,6 +906,8 @@
 .. method:: getvalue()
 
 Return a ``str`` containing the entire contents of the buffer.
+ Newlines are decoded as if by :meth:`~TextIOBase.read`, although
+ the stream position is not changed.
 
 Example usage::
 
diff --git a/Modules/_io/_iomodule.h b/Modules/_io/_iomodule.h
--- a/Modules/_io/_iomodule.h
+++ b/Modules/_io/_iomodule.h
@@ -52,7 +52,12 @@
 which can be safely put aside until another search.
 
 NOTE: for performance reasons, `end` must point to a NUL character ('0円').
- Otherwise, the function will scan further and return garbage. */
+ Otherwise, the function will scan further and return garbage.
+
+ There are three modes, in order of priority:
+ * translated: Only find \n (assume newlines already translated)
+ * universal: Use universal newlines algorithm
+ * Otherwise, the line ending is specified by readnl, a str object */
 extern Py_ssize_t _PyIO_find_line_ending(
 int translated, int universal, PyObject *readnl,
 int kind, char *start, char *end, Py_ssize_t *consumed);
diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c
--- a/Modules/_io/stringio.c
+++ b/Modules/_io/stringio.c
@@ -696,10 +696,8 @@
 char *newline = "\n";
 Py_ssize_t value_len;
 
- /* Parse the newline argument. This used to be done with the 'z'
- specifier, however this allowed any object with the buffer interface to
- be converted. Thus we have to parse it manually since we only want to
- allow unicode objects or None. */
+ /* Parse the newline argument. We only want to allow unicode objects or
+ None. */
 if (newline_obj == Py_None) {
 newline = NULL;
 }
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

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