[uim-commit] r2248 - branches/r5rs/sigscheme
yamaken at freedesktop.org
yamaken at freedesktop.org
Thu Nov 24 04:45:43 PST 2005
Author: yamaken
Date: 2005-11-24 04:45:36 -0800 (Thu, 24 Nov 2005)
New Revision: 2248
Modified:
branches/r5rs/sigscheme/io.c
branches/r5rs/sigscheme/mbcport.c
Log:
* sigscheme/mbcport.c
- (struct ScmMultiByteCharPort_):
* Add lacking 'linenum' of the superclass
* Remove SCM_USE_STATEFUL_ENCODING for 'state'
- (ScmMultiByteCharPort_construct): Fix a variable name
- (mbcport_inspect): Cast correctly
- (mbcport_get_char, mbcport_peek_char, mbcport_put_char,
mbcport_fill_rbuf): Fix state information handlings
* sigscheme/io.c
- Include mbcport.c
Modified: branches/r5rs/sigscheme/io.c
===================================================================
--- branches/r5rs/sigscheme/io.c 2005-11-24 10:15:22 UTC (rev 2247)
+++ branches/r5rs/sigscheme/io.c 2005-11-24 12:45:36 UTC (rev 2248)
@@ -561,4 +561,7 @@
/* FIXME: link conditionally with autoconf */
#include "sbcport.c"
+#if SCM_USE_MULTIBYTE_CHAR
+#include "mbcport.c"
+#endif
#include "fileport.c"
Modified: branches/r5rs/sigscheme/mbcport.c
===================================================================
--- branches/r5rs/sigscheme/mbcport.c 2005-11-24 10:15:22 UTC (rev 2247)
+++ branches/r5rs/sigscheme/mbcport.c 2005-11-24 12:45:36 UTC (rev 2248)
@@ -71,10 +71,10 @@
const ScmCharPortVTbl *vptr;
ScmBytePort *bport; /* protected */
+ int linenum; /* protected */
+
ScmCharCodec *codec;
-#if SCM_USE_STATEFUL_ENCODING
ScmMultibyteState state;
-#endif
char rbuf[SCM_MB_MAX_LEN + sizeof((char)'\0')];
};
@@ -128,9 +128,9 @@
{
ScmBaseCharPort_construct((ScmBaseCharPort *)port, vptr, bport);
- cport->codec = codec;
- cport->rbuf[0] = '\0';
- SCM_MBCPORT_CLEAR_STATE(cport);
+ port->codec = codec;
+ port->rbuf[0] = '\0';
+ SCM_MBCPORT_CLEAR_STATE(port);
}
ScmCharPort *
@@ -161,17 +161,26 @@
static char *
mbcport_inspect(ScmMultiByteCharPort *port)
{
- return ScmBaseCharPort_inspect(port, "mb");
+ return ScmBaseCharPort_inspect((ScmBaseCharPort *)port, "mb");
}
static int
mbcport_get_char(ScmMultiByteCharPort *port)
{
int ch;
+#if SCM_USE_STATEFUL_ENCODING
+ ScmMultibyteCharInfo mbc;
+ ScmMultibyteState next_state;
+ mbc = mbcport_fill_rbuf(port, TRUE);
+ next_state = SCM_MBCINFO_GET_STATE(mbc);
+#endif
+
ch = mbcport_peek_char(port);
port->rbuf[0] = '\0';
- SCM_MBCPORT_CLEAR_STATE(cport)
+#if SCM_USE_STATEFUL_ENCODING
+ SCM_MBCPORT_SET_STATE(port, next_state)
+#endif
#if SCM_DEBUG
if (ch == SCM_NEWLINE_STR[0])
port->linenum++;
@@ -188,7 +197,10 @@
mbc = mbcport_fill_rbuf(port, TRUE);
size = SCM_MBCINFO_GET_SIZE(mbc);
- ch = (size) ? SCM_CHARCODEC_STR2INT(port->codec, port->rbuf, size) : EOF;
+ if (size)
+ ch = SCM_CHARCODEC_STR2INT(port->codec, port->rbuf, size, port->state);
+ else
+ ch = EOF;
return ch;
}
@@ -208,7 +220,8 @@
char wbuf[SCM_MB_MAX_LEN + sizeof((char)'\0')];
char *end;
- end = SCM_CHARCODEC_INT2STR(port->codec, wbuf, ch);
+ /* FIXME: set updated state to port->state */
+ end = SCM_CHARCODEC_INT2STR(port->codec, wbuf, ch, port->state);
if (!end)
SCM_CHARPORT_ERROR(port, "ScmMultibyteCharPort: invalid character");
return SCM_BYTEPORT_WRITE(port->bport, end - wbuf, wbuf);
@@ -238,6 +251,7 @@
SCM_CHARPORT_ERROR(port, "ScmMultibyteCharPort: broken scanner");
byte = SCM_BYTEPORT_GET_BYTE(port->bport);
+ SCM_MBCINFO_SET_STATE(mbc, SCM_MBS_GET_STATE(mbs));
if (byte == EOF) {
SCM_MBCINFO_INIT(mbc);
port->rbuf[0] = '\0';
More information about the uim-commit
mailing list