summaryrefslogtreecommitdiff
path: root/enc
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-05 03:34:52 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-05 03:34:52 +0000
commitb84d31c524093f91932813a09853ab417f121dff (patch)
treec155c8860557ce05631ab53e9e095736dbecaa8f /enc
parent578534bdda95934934da30503463a206bb0568a6 (diff)
* transcode_data.h (TRANSCODE_ERROR): common transcode failure
exception, would be changed later. * enc/trans/japanese.c (UNSUPPORTED_MODE): unsupported mode transition exception. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18363 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'enc')
-rw-r--r--enc/trans/japanese.c90
1 files changed, 47 insertions, 43 deletions
diff --git a/enc/trans/japanese.c b/enc/trans/japanese.c
index 1fa5a8bd60..fb5d3141d6 100644
--- a/enc/trans/japanese.c
+++ b/enc/trans/japanese.c
@@ -23723,48 +23723,46 @@ enum ISO_2022_ESCSEQ {
#define ISO_2022_GZ_JIS_X_0213_2000_2 ISO_2022_ENCODING(ISO_2022_GZDM4,'P')
#define ISO_2022_GZ_JIS_X_0213_2004_1 ISO_2022_ENCODING(ISO_2022_GZDM4,'Q')
+#define UNSUPPORTED_MODE TRANSCODE_ERROR
+
static int
get_iso_2022_mode(const unsigned char **in_pos)
{
int new_mode;
const unsigned char *in_p = *in_pos;
- switch (*in_p++)
- {
- case '(':
- switch (*in_p++)
- {
- case 'B': case 'I': case 'J':
+ switch (*in_p++) {
+ case '(':
+ switch (*in_p++) {
+ case 'B': case 'I': case 'J':
new_mode = ISO_2022_ENCODING(ISO_2022_GZD4, *(in_p-1));
break;
- default:
- rb_raise(rb_eRuntimeError /*change exception*/, "this mode is not supported (ESC ( %c)", *(in_p-1));
+ default:
+ rb_raise(UNSUPPORTED_MODE, "this mode is not supported (ESC ( %c)", *(in_p-1));
break;
}
break;
- case '$':
- switch (*in_p++)
- {
- case '@': case 'A': case 'B':
+ case '$':
+ switch (*in_p++) {
+ case '@': case 'A': case 'B':
new_mode = ISO_2022_ENCODING(ISO_2022_GZDM4, *(in_p-1));
break;
- case '(':
- switch (*in_p++)
- {
- case 'D': case 'O': case 'P': case 'Q':
+ case '(':
+ switch (*in_p++) {
+ case 'D': case 'O': case 'P': case 'Q':
new_mode = ISO_2022_ENCODING(ISO_2022_GZDM4, *(in_p-1));
break;
- default:
- rb_raise(rb_eRuntimeError /*change exception*/, "this mode is not supported (ESC $ ( %c)", *(in_p-1));
+ default:
+ rb_raise(UNSUPPORTED_MODE, "this mode is not supported (ESC $ ( %c)", *(in_p-1));
break;
}
break;
- default:
- rb_raise(rb_eRuntimeError /*change exception*/, "this mode is not supported (ESC $ %c)", *(in_p-1));
+ default:
+ rb_raise(UNSUPPORTED_MODE, "this mode is not supported (ESC $ %c)", *(in_p-1));
break;
}
break;
- default:
- rb_raise(rb_eRuntimeError /*change exception*/, "this mode is not supported (ESC %c)", *(in_p-1));
+ default:
+ rb_raise(UNSUPPORTED_MODE, "this mode is not supported (ESC %c)", *(in_p-1));
break;
}
*in_pos = in_p;
@@ -23793,25 +23791,28 @@ from_iso_2022_jp_transcoder_preprocessor(const unsigned char **in_pos, unsigned
c1 = *in_p++;
if (c1 == 0x1B) {
cur_mode = get_iso_2022_mode(&in_p);
- } else if (c1 == 0x1E || c1 == 0x1F) {
+ }
+ else if (c1 == 0x1E || c1 == 0x1F) {
/* SHIFT */
- rb_raise(rb_eRuntimeError /*change exception*/, "shift is not supported");
- } else if (c1 >= 0x80) {
- rb_raise(rb_eRuntimeError /*change exception*/, "invalid byte sequence");
- } else {
+ rb_raise(UNSUPPORTED_MODE, "shift is not supported");
+ }
+ else if (c1 >= 0x80) {
+ rb_raise(TRANSCODE_ERROR, "invalid byte sequence");
+ }
+ else {
switch (cur_mode) {
- case ISO_2022_GZ_ASCII:
- case ISO_2022_GZ_JIS_X_0201_Roman:
+ case ISO_2022_GZ_ASCII:
+ case ISO_2022_GZ_JIS_X_0201_Roman:
*out_p++ = c1;
break;
- case ISO_2022_GZ_JIS_X_0201_Katakana:
+ case ISO_2022_GZ_JIS_X_0201_Katakana:
*out_p++ = 0x8E;
*out_p++ = c1 | 0x80;
break;
- case ISO_2022_GZ_JIS_X_0212_1990:
+ case ISO_2022_GZ_JIS_X_0212_1990:
*out_p++ = 0x8F;
- case ISO_2022_GZ_JIS_C_6226_1978:
- case ISO_2022_GZ_JIS_X_0208_1983:
+ case ISO_2022_GZ_JIS_C_6226_1978:
+ case ISO_2022_GZ_JIS_X_0208_1983:
*out_p++ = c1 | 0x80;
*out_p++ = *in_p++ | 0x80;
break;
@@ -23828,13 +23829,12 @@ select_iso_2022_mode(unsigned char **out_pos, int new_mode)
{
unsigned char *out_p = *out_pos;
*out_p++ = '\x1b';
- switch (new_mode>>8)
- {
- case ISO_2022_GZD4:
+ switch (new_mode>>8) {
+ case ISO_2022_GZD4:
*out_p++ = new_mode >> 8;
*out_p++ = new_mode & 0x7F;
break;
- case ISO_2022_GZDM4:
+ case ISO_2022_GZDM4:
*out_p++ = new_mode >> 16;
if ((new_mode & 0x7F) != '@' &&
(new_mode & 0x7F) != 'A' &&
@@ -23844,8 +23844,8 @@ select_iso_2022_mode(unsigned char **out_pos, int new_mode)
}
*out_p++ = new_mode & 0x7F;
break;
- default:
- rb_raise(rb_eRuntimeError /*change exception*/, "this mode is not supported.");
+ default:
+ rb_raise(UNSUPPORTED_MODE, "this mode is not supported.");
break;
}
*out_pos = out_p;
@@ -23874,20 +23874,24 @@ to_iso_2022_jp_transcoder_postprocessor(const unsigned char **in_pos, unsigned c
next_byte = *in_p++;
if (next_byte < 0x80) {
new_mode = ISO_2022_GZ_ASCII;
- } else if (next_byte == 0x8E) {
+ }
+ else if (next_byte == 0x8E) {
new_mode = ISO_2022_GZ_JIS_X_0201_Katakana;
next_byte = *in_p++;
- } else if (next_byte == 0x8F) {
+ }
+ else if (next_byte == 0x8F) {
new_mode = ISO_2022_GZ_JIS_X_0212_1990;
next_byte = *in_p++;
- } else {
+ }
+ else {
new_mode = ISO_2022_GZ_JIS_X_0208_1983;
}
if (cur_mode != new_mode)
cur_mode = select_iso_2022_mode(&out_p, new_mode);
if (cur_mode < 0xFFFF) {
*out_p++ = next_byte & 0x7F;
- } else {
+ }
+ else {
*out_p++ = next_byte & 0x7F;
*out_p++ = *in_p++ & 0x7F;
}