summaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
authorWalter Dörwald <walter@livinglogic.de>2006-03-15 11:35:15 +0000
committerWalter Dörwald <walter@livinglogic.de>2006-03-15 11:35:15 +0000
commitabb02e59946f9ea3076e96e3b03b51d1cebd46b4 (patch)
tree165444acd89173a8832547078cbc417d4626116e /Python
parente2ebb2d7f777db2de72cfeb0e3c489ac4cc5c400 (diff)
downloadcpython-git-abb02e59946f9ea3076e96e3b03b51d1cebd46b4.tar.gz
Patch #1436130: codecs.lookup() now returns a CodecInfo object (a subclass
of tuple) that provides incremental decoders and encoders (a way to use stateful codecs without the stream API). Functions codecs.getincrementaldecoder() and codecs.getincrementalencoder() have been added.
Diffstat (limited to 'Python')
-rw-r--r--Python/codecs.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/Python/codecs.c b/Python/codecs.c
index 253bc39326..0e8c374980 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -260,6 +260,56 @@ PyObject *PyCodec_Decoder(const char *encoding)
return NULL;
}
+PyObject *PyCodec_IncrementalEncoder(const char *encoding,
+ const char *errors)
+{
+ PyObject *codecs, *ret, *encoder;
+
+ codecs = _PyCodec_Lookup(encoding);
+ if (codecs == NULL)
+ goto onError;
+ encoder = PyObject_GetAttrString(codecs, "incrementalencoder");
+ if (encoder == NULL) {
+ Py_DECREF(codecs);
+ return NULL;
+ }
+ if (errors)
+ ret = PyObject_CallFunction(encoder, "O", errors);
+ else
+ ret = PyObject_CallFunction(encoder, NULL);
+ Py_DECREF(encoder);
+ Py_DECREF(codecs);
+ return ret;
+
+ onError:
+ return NULL;
+}
+
+PyObject *PyCodec_IncrementalDecoder(const char *encoding,
+ const char *errors)
+{
+ PyObject *codecs, *ret, *decoder;
+
+ codecs = _PyCodec_Lookup(encoding);
+ if (codecs == NULL)
+ goto onError;
+ decoder = PyObject_GetAttrString(codecs, "incrementaldecoder");
+ if (decoder == NULL) {
+ Py_DECREF(codecs);
+ return NULL;
+ }
+ if (errors)
+ ret = PyObject_CallFunction(decoder, "O", errors);
+ else
+ ret = PyObject_CallFunction(decoder, NULL);
+ Py_DECREF(decoder);
+ Py_DECREF(codecs);
+ return ret;
+
+ onError:
+ return NULL;
+}
+
PyObject *PyCodec_StreamReader(const char *encoding,
PyObject *stream,
const char *errors)