Ruby 1.9.3p327(2012-11-10revision37606)
|
00001 /* autogenerated. */ 00002 /* src="transcode-tblgen.rb", len=28123, checksum=30477 */ 00003 /* src="japanese.trans", len=2261, checksum=31681 */ 00004 00005 #include "transcode_data.h" 00006 00007 00008 00009 static const unsigned char 00010 japanese_byte_array[895] = { 00011 #define eucjp2sjis_8E_offsets 0 00012 161, 254, 00013 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00014 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00015 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00016 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 00017 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00018 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00019 00020 #define eucjp2sjis_8F_A1toFE_offsets 96 00021 161, 254, 00022 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00023 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00024 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00025 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00026 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00027 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00028 00029 #define eucjp2sjis_offsets 192 00030 0, 254, 00031 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00032 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00033 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00034 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00035 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00036 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00037 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00038 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00039 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 00040 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00041 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 00042 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 00043 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 00044 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 00045 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 00046 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 00047 00048 #define sjis2eucjp_81to9F_offsets 449 00049 64, 252, 00050 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00051 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00052 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00053 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 00054 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00055 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00056 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00057 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00058 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00059 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00060 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00061 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00062 00063 #define sjis2eucjp_offsets 640 00064 0, 252, 00065 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00066 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00067 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00068 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00069 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00070 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00071 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00072 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 00073 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00074 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00075 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00076 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00077 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00078 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00079 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00080 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 00081 00082 }; 00083 static const unsigned int 00084 japanese_word_array[35] = { 00085 #define eucjp2sjis_8E_infos WORDINDEX2INFO(0) 00086 INVALID, FUNso, UNDEF, 00087 00088 #define eucjp2sjis_8E WORDINDEX2INFO(3) 00089 eucjp2sjis_8E_offsets, 00090 eucjp2sjis_8E_infos, 00091 00092 #define eucjp2sjis_8F_A1toFE_infos WORDINDEX2INFO(5) 00093 INVALID, UNDEF, 00094 00095 #define eucjp2sjis_8F_A1toFE WORDINDEX2INFO(7) 00096 eucjp2sjis_8F_A1toFE_offsets, 00097 eucjp2sjis_8F_A1toFE_infos, 00098 00099 #define eucjp2sjis_8F_infos WORDINDEX2INFO(9) 00100 INVALID, eucjp2sjis_8F_A1toFE, 00101 00102 #define eucjp2sjis_8F WORDINDEX2INFO(11) 00103 eucjp2sjis_8F_A1toFE_offsets, 00104 eucjp2sjis_8F_infos, 00105 00106 #define eucjp2sjis_A1toFE_infos WORDINDEX2INFO(13) 00107 INVALID, FUNso, 00108 00109 #define eucjp2sjis_A1toFE WORDINDEX2INFO(15) 00110 eucjp2sjis_8F_A1toFE_offsets, 00111 eucjp2sjis_A1toFE_infos, 00112 00113 #define eucjp2sjis_infos WORDINDEX2INFO(17) 00114 NOMAP, INVALID, 00115 eucjp2sjis_8E, eucjp2sjis_8F, 00116 eucjp2sjis_A1toFE, 00117 00118 #define eucjp2sjis WORDINDEX2INFO(22) 00119 eucjp2sjis_offsets, 00120 eucjp2sjis_infos, 00121 00122 #define sjis2eucjp_81to9F WORDINDEX2INFO(24) 00123 sjis2eucjp_81to9F_offsets, 00124 eucjp2sjis_A1toFE_infos, 00125 00126 #define sjis2eucjp_F0toFC WORDINDEX2INFO(26) 00127 sjis2eucjp_81to9F_offsets, 00128 eucjp2sjis_8F_A1toFE_infos, 00129 00130 #define sjis2eucjp_infos WORDINDEX2INFO(28) 00131 NOMAP, INVALID, 00132 sjis2eucjp_81to9F, FUNso, 00133 sjis2eucjp_F0toFC, 00134 00135 #define sjis2eucjp WORDINDEX2INFO(33) 00136 sjis2eucjp_offsets, 00137 sjis2eucjp_infos, 00138 00139 }; 00140 #define TRANSCODE_TABLE_INFO japanese_byte_array, 895, japanese_word_array, 35, ((int)sizeof(unsigned int)) 00141 00142 00143 static ssize_t 00144 fun_so_eucjp2sjis(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize) 00145 { 00146 if (s[0] == 0x8e) { 00147 o[0] = s[1]; 00148 return 1; 00149 } 00150 else { 00151 int h, m, l; 00152 m = s[0] & 1; 00153 h = (s[0]+m) >> 1; 00154 h += s[0] < 0xdf ? 0x30 : 0x70; 00155 l = s[1] - m * 94 - 3; 00156 if (0x7f <= l) 00157 l++; 00158 o[0] = h; 00159 o[1] = l; 00160 return 2; 00161 } 00162 } 00163 00164 static ssize_t 00165 fun_so_sjis2eucjp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize) 00166 { 00167 if (l == 1) { 00168 o[0] = '\x8e'; 00169 o[1] = s[0]; 00170 return 2; 00171 } 00172 else { 00173 int h, l; 00174 h = s[0]; 00175 l = s[1]; 00176 if (0xe0 <= h) 00177 h -= 64; 00178 l += l < 0x80 ? 0x61 : 0x60; 00179 h = h * 2 - 0x61; 00180 if (0xfe < l) { 00181 l -= 94; 00182 h += 1; 00183 } 00184 o[0] = h; 00185 o[1] = l; 00186 return 2; 00187 } 00188 } 00189 00190 static const rb_transcoder 00191 rb_eucjp2sjis = { 00192 "EUC-JP", "Shift_JIS", eucjp2sjis, 00193 TRANSCODE_TABLE_INFO, 00194 1, /* input_unit_length */ 00195 3, /* max_input */ 00196 2, /* max_output */ 00197 asciicompat_converter, /* asciicompat_type */ 00198 0, NULL, NULL, /* state_size, state_init, state_fini */ 00199 NULL, NULL, NULL, fun_so_eucjp2sjis 00200 }; 00201 00202 static const rb_transcoder 00203 rb_sjis2eucjp = { 00204 "Shift_JIS", "EUC-JP", sjis2eucjp, 00205 TRANSCODE_TABLE_INFO, 00206 1, /* input_unit_length */ 00207 2, /* max_input */ 00208 2, /* max_output */ 00209 asciicompat_converter, /* asciicompat_type */ 00210 0, NULL, NULL, /* state_size, state_init, state_fini */ 00211 NULL, NULL, NULL, fun_so_sjis2eucjp 00212 }; 00213 00214 void 00215 Init_japanese(void) 00216 { 00217 rb_register_transcoder(&rb_eucjp2sjis); 00218 rb_register_transcoder(&rb_sjis2eucjp); 00219 } 00220 00221