summaryrefslogtreecommitdiff
path: root/enc
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-14 15:56:39 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-14 15:56:39 +0000
commit74a36d5d1f17f1529090fb42a405d4677caa567e (patch)
treedfd43525dda4ef8963b13d6a97aafa2222528dd6 /enc
parente0e39e0db80be635fa68e28dab84966300b4eb29 (diff)
* include/ruby/encoding.h (rb_econv_output): declared.
* transcode_data.h (rb_transcoder): add resetsize_func field. * enc/trans/iso2022.trans (iso2022jp_reset_sequence_size): defined. (rb_EUC_JP_to_ISO_2022_JP): provede resetsize_func. * tool/transcode-tblgen.rb: set NULL for resetsize_func. * transcode.c (rb_econv_output): new function for inserting output. (output_replacement_character): use rb_econv_output. (transcode_loop): check return value of output_replacement_character. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18628 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'enc')
-rw-r--r--enc/trans/iso2022.trans17
1 files changed, 13 insertions, 4 deletions
diff --git a/enc/trans/iso2022.trans b/enc/trans/iso2022.trans
index 1d015eea54..0414493635 100644
--- a/enc/trans/iso2022.trans
+++ b/enc/trans/iso2022.trans
@@ -83,7 +83,7 @@ fun_so_eucjp_to_iso2022jp(rb_transcoding *t, const unsigned char *s, size_t l, u
if (t->stateful[0] == 0) {
t->stateful[0] = 1; /* initialized flag */
- t->stateful[1] = 1; /* ASCII mode */
+ t->stateful[1] = 1; /* G0 = ASCII */
}
if (l != t->stateful[1]) {
@@ -91,13 +91,13 @@ fun_so_eucjp_to_iso2022jp(rb_transcoding *t, const unsigned char *s, size_t l, u
*o++ = 0x1b;
*o++ = '(';
*o++ = 'B';
- t->stateful[1] = 1;
+ t->stateful[1] = 1; /* G0 = ASCII */
}
else {
*o++ = 0x1b;
*o++ = '$';
*o++ = 'B';
- t->stateful[1] = 2;
+ t->stateful[1] = 2; /* G0 = JIS X 0208 1983 */
}
}
@@ -113,6 +113,14 @@ fun_so_eucjp_to_iso2022jp(rb_transcoding *t, const unsigned char *s, size_t l, u
}
static int
+iso2022jp_reset_sequence_size(rb_transcoding *t)
+{
+ if (t->stateful[1] == 2)
+ return 3;
+ return 0;
+}
+
+static int
finish_eucjp_to_iso2022jp(rb_transcoding *t, unsigned char *o)
{
unsigned char *output0 = o;
@@ -137,7 +145,8 @@ rb_EUC_JP_to_ISO_2022_JP = {
3, /* max_input */
5, /* max_output */
NULL, NULL, NULL, fun_so_eucjp_to_iso2022jp,
- finish_eucjp_to_iso2022jp, finish_eucjp_to_iso2022jp
+ finish_eucjp_to_iso2022jp,
+ iso2022jp_reset_sequence_size, finish_eucjp_to_iso2022jp
};
void