From 0881a39acd7d3dfa6cdbea76f80dabd939996807 Mon Sep 17 00:00:00 2001 From: naruse Date: Sun, 26 Apr 2009 13:03:50 +0000 Subject: * transcode.c (ASIS): added for multi byte direct map. * transcode.c (transcode_restartable0): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ transcode.c | 13 +++++++++++-- transcode_data.h | 1 + 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index a849596c8a..796b36c37b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sun Apr 26 21:59:43 2009 NARUSE, Yui + + * transcode.c (ASIS): added for multi byte direct map. + + * transcode.c (transcode_restartable0): ditto. + Sun Apr 26 20:33:12 2009 NARUSE, Yui * tool/transcode-tb (ActionMap#generate_node): diff --git a/transcode.c b/transcode.c index aeb9fe5cd7..fba247a718 100644 --- a/transcode.c +++ b/transcode.c @@ -505,6 +505,7 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos, case 30: goto resume_label30; case 31: goto resume_label31; case 32: goto resume_label32; + case 33: goto resume_label33; } while (1) { @@ -539,8 +540,16 @@ transcode_restartable0(const unsigned char **in_pos, unsigned char **out_pos, } follow_info: switch (next_info & 0x1F) { - case NOMAP: /* xxx: copy last byte only? */ - SUSPEND_OBUF(3); *out_p++ = next_byte; + case NOMAP: + SUSPEND_OBUF(3); *out_p++ = next_byte; + continue; + case ASIS: + { + const unsigned char *p = inchar_start; + while (p < in_p) { + SUSPEND_OBUF(33); *out_p++ = (unsigned char)*p++; + } + } continue; case 0x00: case 0x04: case 0x08: case 0x0C: case 0x10: case 0x14: case 0x18: case 0x1C: diff --git a/transcode_data.h b/transcode_data.h index 0966b7dcad..9a09e18652 100644 --- a/transcode_data.h +++ b/transcode_data.h @@ -36,6 +36,7 @@ #define FUNso (PType 0x0F) /* function from start to output */ #define STR1 (PType 0x11) /* string 4 <= len <= 259 bytes: 1byte length + content */ #define GB4bt (PType 0x12) /* GB18030 four bytes payload */ +#define ASIS (PType 0x13) /* multi byte direct map */ #define STR1_LENGTH(byte_addr) (unsigned int)(*(byte_addr) + 4) #define STR1_BYTEINDEX(w) ((w) >> 6) -- cgit v1.2.3