diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | enc/trans/japanese.c | 90 | ||||
-rw-r--r-- | transcode.c | 4 | ||||
-rw-r--r-- | transcode_data.h | 2 |
4 files changed, 59 insertions, 45 deletions
@@ -1,3 +1,11 @@ +Tue Aug 5 12:34:49 2008 Nobuyoshi Nakada <[email protected]> + + * transcode_data.h (TRANSCODE_ERROR): common transcode failure + exception, would be changed later. + + * enc/trans/japanese.c (UNSUPPORTED_MODE): unsupported mode transition + exception. + Tue Aug 5 03:29:52 2008 Nobuyoshi Nakada <[email protected]> * array.c (rb_ary_sort_bang): respect overridden <=> for String and 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; } diff --git a/transcode.c b/transcode.c index 38cd155f35..629da2b760 100644 --- a/transcode.c +++ b/transcode.c @@ -274,7 +274,7 @@ transcode_loop(const unsigned char **in_pos, unsigned char **out_pos, output_replacement_character(&out_p, to_encoding); continue; } - rb_raise(rb_eRuntimeError /*change exception*/, "invalid byte sequence"); + rb_raise(TRANSCODE_ERROR, "invalid byte sequence"); continue; undef: /* valid character in from encoding @@ -291,7 +291,7 @@ transcode_loop(const unsigned char **in_pos, unsigned char **out_pos, output_replacement_character(&out_p, to_encoding); continue; } - rb_raise(rb_eRuntimeError /*@@@change exception*/, "conversion undefined for byte sequence (maybe invalid byte sequence)"); + rb_raise(TRANSCODE_ERROR, "conversion undefined for byte sequence (maybe invalid byte sequence)"); continue; } /* cleanup */ diff --git a/transcode_data.h b/transcode_data.h index cdeb5fc00d..3fecaf6acc 100644 --- a/transcode_data.h +++ b/transcode_data.h @@ -83,4 +83,6 @@ typedef struct rb_transcoder { void rb_declare_transcoder(const char *enc1, const char *enc2, const char *lib); void rb_register_transcoder(const rb_transcoder *); +#define TRANSCODE_ERROR rb_eRuntimeError /*change exception*/ + #endif /* RUBY_TRANSCODE_DATA_H */ |