[KoCo-CVS] [Commit] cjkcodecs/src _iso_2022_jp.c _iso_2022_jp_1.c multibytecodec.c
Brought to you by:
perky
From: Hye-Shik C. <pe...@us...> - 2003-06-05 10:21:20
|
perky 03/06/05 02:56:23 Modified: src _iso_2022_jp.c _iso_2022_jp_1.c multibytecodec.c Log: ISO-2022-JP and ISO-2022-JP-1 mandates to end with ASCII on G0. Revision Changes Path 1.4 +13 -1 cjkcodecs/src/_iso_2022_jp.c Index: _iso_2022_jp.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_iso_2022_jp.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- _iso_2022_jp.c 2 Jun 2003 10:36:03 -0000 1.3 +++ _iso_2022_jp.c 5 Jun 2003 09:56:21 -0000 1.4 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _iso_2022_jp.c,v 1.3 2003/06/02 10:36:03 perky Exp $ + * $Id: _iso_2022_jp.c,v 1.4 2003/06/05 09:56:21 perky Exp $ */ #include "codeccommon.h" @@ -42,6 +42,18 @@ state->i = 0; STATE_SETG0(state, CHARSET_ASCII) STATE_SETG1(state, CHARSET_ASCII) + return 0; +} + +#define HAVE_ENCODER_RESET +ENCODER_RESET(iso_2022_jp) +{ + if (STATE_GETG0(state) != CHARSET_ASCII) { + RESERVE_OUTBUF(3) + PAVE3(ESC, '(', 'B') + STATE_SETG0(state, CHARSET_ASCII) + NEXT_OUT(3) + } return 0; } 1.3 +13 -1 cjkcodecs/src/_iso_2022_jp_1.c Index: _iso_2022_jp_1.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/_iso_2022_jp_1.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- _iso_2022_jp_1.c 2 Jun 2003 10:43:41 -0000 1.2 +++ _iso_2022_jp_1.c 5 Jun 2003 09:56:22 -0000 1.3 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: _iso_2022_jp_1.c,v 1.2 2003/06/02 10:43:41 perky Exp $ + * $Id: _iso_2022_jp_1.c,v 1.3 2003/06/05 09:56:22 perky Exp $ */ #include "codeccommon.h" @@ -43,6 +43,18 @@ state->i = 0; STATE_SETG0(state, CHARSET_ASCII) STATE_SETG1(state, CHARSET_ASCII) + return 0; +} + +#define HAVE_ENCODER_RESET +ENCODER_RESET(iso_2022_jp_1) +{ + if (STATE_GETG0(state) != CHARSET_ASCII) { + RESERVE_OUTBUF(3) + PAVE3(ESC, '(', 'B') + STATE_SETG0(state, CHARSET_ASCII) + NEXT_OUT(3) + } return 0; } 1.14 +20 -6 cjkcodecs/src/multibytecodec.c Index: multibytecodec.c =================================================================== RCS file: /cvsroot/koco/cjkcodecs/src/multibytecodec.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- multibytecodec.c 31 May 2003 11:50:19 -0000 1.13 +++ multibytecodec.c 5 Jun 2003 09:56:22 -0000 1.14 @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $Id: multibytecodec.c,v 1.13 2003/05/31 11:50:19 perky Exp $ + * $Id: multibytecodec.c,v 1.14 2003/06/05 09:56:22 perky Exp $ */ #include "Python.h" @@ -72,7 +72,8 @@ static char *streamkwarglist[] = {"stream", "errors", NULL}; static PyObject *multibytecodec_encode(MultibyteCodec *, - MultibyteCodec_State *, const Py_UNICODE *, int, PyObject *); + MultibyteCodec_State *, const Py_UNICODE *, int, PyObject *, + int flush); static PyObject *mbstreamreader_create(MultibyteCodec *, PyObject *, const char *); static PyObject *mbstreamwriter_create(MultibyteCodec *, @@ -261,7 +262,7 @@ } retstr = multibytecodec_encode(codec, state, PyUnicode_AS_UNICODE(tobj), - PyUnicode_GET_SIZE(tobj), ERROR_STRICT); + PyUnicode_GET_SIZE(tobj), ERROR_STRICT, 0); if (retstr == NULL) goto errorexit; @@ -401,7 +402,7 @@ multibytecodec_encode(MultibyteCodec *codec, MultibyteCodec_State *state, const Py_UNICODE *data, int datalen, - PyObject *errors) + PyObject *errors, int flush) { MultibyteEncodeBuffer buf; int finalsize; @@ -433,6 +434,19 @@ goto errorexit; } + if (flush && codec->encreset != NULL) + for (;;) { + int r; + size_t outleft; + + outleft = (size_t)(buf.outbuf_end - buf.outbuf); + r = codec->encreset(state, &buf.outbuf, outleft); + if (r == 0) + break; + else if (multibytecodec_encerror(codec, state, &buf, errors, r)) + goto errorexit; + } + finalsize = (int)((char*)buf.outbuf - PyString_AS_STRING(buf.outobj)); if (finalsize != PyString_GET_SIZE(buf.outobj)) @@ -468,7 +482,7 @@ if (self->codec->encinit != NULL && self->codec->encinit(&state) != 0) goto errorexit; - r = multibytecodec_encode(self->codec, &state, data, datalen, errorcb); + r = multibytecodec_encode(self->codec, &state, data, datalen, errorcb, 1); if (r == NULL) goto errorexit; @@ -914,7 +928,7 @@ return 0; r = multibytecodec_encode(self->codec, &self->state, - (Py_UNICODE *)PyUnicode_AS_UNICODE(unistr), rsize, self->errors); + (Py_UNICODE *)PyUnicode_AS_UNICODE(unistr), rsize, self->errors, 0); if (r == NULL) goto errorexit; |