2 /* src="transcode-tblgen.rb", len=20916, checksum=45137 */
3 /* src="iso2022.trans", len=6668, checksum=25414 */
5 #include "transcode_data.h"
9 static const unsigned char
10 iso2022_byte_array[751] = {
11 #define iso2022jp_decoder_1B_24_offsets 0
15 #define iso2022jp_decoder_1B_28_offsets 5
17 1, 0, 0, 0, 0, 0, 0, 0, 1,
19 #define iso2022jp_decoder_1B_offsets 16
23 #define iso2022jp_decoder_offsets 23
25 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
26 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
27 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
28 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
29 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
30 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
31 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
34 #define iso2022jp_decoder_jisx0208_rest_offsets 153
36 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
37 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
38 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
39 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
40 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
41 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
43 #define iso2022jp_encoder_90_A1_offsets 249
45 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
46 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
47 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
48 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
49 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
50 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
52 #define iso2022jp_encoder_offsets 345
54 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
55 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
56 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
57 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
58 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
59 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
60 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
61 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
62 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
65 #define eucjp_to_stateless_iso2022jp_offsets 494
67 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
68 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
69 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
70 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
71 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
72 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
73 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
74 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
75 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4,
76 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
77 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
78 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
79 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
80 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
81 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
82 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
85 static const unsigned int
86 iso2022_word_array[50] = {
87 #define iso2022jp_decoder_1B_24_infos WORDINDEX2INFO(0)
90 #define iso2022jp_decoder_1B_24 WORDINDEX2INFO(2)
91 iso2022jp_decoder_1B_24_offsets,
92 iso2022jp_decoder_1B_24_infos,
94 #define iso2022jp_decoder_1B_28 WORDINDEX2INFO(4)
95 iso2022jp_decoder_1B_28_offsets,
96 iso2022jp_decoder_1B_24_infos,
98 #define iso2022jp_decoder_1B_infos WORDINDEX2INFO(6)
99 INVALID, iso2022jp_decoder_1B_24,
100 iso2022jp_decoder_1B_28,
102 #define iso2022jp_decoder_1B WORDINDEX2INFO(9)
103 iso2022jp_decoder_1B_offsets,
104 iso2022jp_decoder_1B_infos,
106 #define iso2022jp_decoder_infos WORDINDEX2INFO(11)
108 iso2022jp_decoder_1B,
110 #define iso2022jp_decoder WORDINDEX2INFO(14)
111 iso2022jp_decoder_offsets,
112 iso2022jp_decoder_infos,
114 #define iso2022jp_decoder_jisx0208_rest WORDINDEX2INFO(16)
115 iso2022jp_decoder_jisx0208_rest_offsets,
116 iso2022jp_decoder_1B_24_infos,
118 #define iso2022jp_encoder_90_A1 WORDINDEX2INFO(18)
119 iso2022jp_encoder_90_A1_offsets,
120 iso2022jp_decoder_1B_24_infos,
122 #define iso2022jp_encoder_90_infos WORDINDEX2INFO(20)
123 INVALID, iso2022jp_encoder_90_A1,
125 #define iso2022jp_encoder_90 WORDINDEX2INFO(22)
126 iso2022jp_encoder_90_A1_offsets,
127 iso2022jp_encoder_90_infos,
129 #define iso2022jp_encoder_infos WORDINDEX2INFO(24)
131 iso2022jp_encoder_90,
133 #define iso2022jp_encoder WORDINDEX2INFO(27)
134 iso2022jp_encoder_offsets,
135 iso2022jp_encoder_infos,
137 #define stateless_iso2022jp_to_eucjp_infos WORDINDEX2INFO(29)
139 iso2022jp_encoder_90,
141 #define stateless_iso2022jp_to_eucjp WORDINDEX2INFO(32)
142 iso2022jp_encoder_offsets,
143 stateless_iso2022jp_to_eucjp_infos,
145 #define eucjp_to_stateless_iso2022jp_8E_infos WORDINDEX2INFO(34)
148 #define eucjp_to_stateless_iso2022jp_8E WORDINDEX2INFO(36)
149 iso2022jp_encoder_90_A1_offsets,
150 eucjp_to_stateless_iso2022jp_8E_infos,
152 #define eucjp_to_stateless_iso2022jp_8F_infos WORDINDEX2INFO(38)
153 INVALID, eucjp_to_stateless_iso2022jp_8E,
155 #define eucjp_to_stateless_iso2022jp_8F WORDINDEX2INFO(40)
156 iso2022jp_encoder_90_A1_offsets,
157 eucjp_to_stateless_iso2022jp_8F_infos,
159 #define eucjp_to_stateless_iso2022jp_infos WORDINDEX2INFO(42)
161 INVALID, eucjp_to_stateless_iso2022jp_8E,
162 eucjp_to_stateless_iso2022jp_8F, iso2022jp_encoder_90_A1,
164 #define eucjp_to_stateless_iso2022jp WORDINDEX2INFO(48)
165 eucjp_to_stateless_iso2022jp_offsets,
166 eucjp_to_stateless_iso2022jp_infos,
169 #define TRANSCODE_TABLE_INFO iso2022_byte_array, 751, iso2022_word_array, 50, sizeof(unsigned int)
173 /* ignore JIS X 0201 latin */
174 #define G0_JISX0208_1978 1
175 #define G0_JISX0208_1983 2
177 #define EMACS_MULE_LEADING_CODE_JISX0208_1978 0220
178 #define EMACS_MULE_LEADING_CODE_JISX0208_1983 0222
181 iso2022jp_init(void *statep)
183 unsigned char *sp = statep;
189 fun_si_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l)
191 unsigned char *sp = statep;
194 else if (0x21 <= s[0] && s[0] <= 0x7e)
195 return (VALUE)iso2022jp_decoder_jisx0208_rest;
197 return (VALUE)INVALID;
201 fun_so_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l, unsigned char* o, size_t osize)
203 unsigned char *sp = statep;
216 *sp = G0_JISX0208_1978;
220 *sp = G0_JISX0208_1983;
227 if (*sp == G0_JISX0208_1978)
228 o[0] = EMACS_MULE_LEADING_CODE_JISX0208_1978;
230 o[0] = EMACS_MULE_LEADING_CODE_JISX0208_1983;
237 static const rb_transcoder
238 rb_iso2022jp_decoder = {
239 "ISO-2022-JP", "stateless-ISO-2022-JP", iso2022jp_decoder,
240 TRANSCODE_TABLE_INFO,
241 1, /* input_unit_length */
244 asciicompat_decoder, /* asciicompat_type */
245 1, iso2022jp_init, iso2022jp_init, /* state_size, state_init, state_fini */
246 NULL, fun_si_iso2022jp_decoder, NULL, fun_so_iso2022jp_decoder
250 fun_so_iso2022jp_encoder(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
252 unsigned char *sp = statep;
253 unsigned char *output0 = o;
258 else if (s[0] == EMACS_MULE_LEADING_CODE_JISX0208_1978)
259 newstate = G0_JISX0208_1978;
261 newstate = G0_JISX0208_1983;
263 if (*sp != newstate) {
264 if (newstate == G0_ASCII) {
269 else if (newstate == G0_JISX0208_1978) {
294 iso2022jp_encoder_reset_sequence_size(void *statep)
296 unsigned char *sp = statep;
303 finish_iso2022jp_encoder(void *statep, unsigned char *o, size_t osize)
305 unsigned char *sp = statep;
306 unsigned char *output0 = o;
319 static const rb_transcoder
320 rb_iso2022jp_encoder = {
321 "stateless-ISO-2022-JP", "ISO-2022-JP", iso2022jp_encoder,
322 TRANSCODE_TABLE_INFO,
323 1, /* input_unit_length */
326 asciicompat_encoder, /* asciicompat_type */
327 1, iso2022jp_init, iso2022jp_init, /* state_size, state_init, state_fini */
328 NULL, NULL, NULL, fun_so_iso2022jp_encoder,
329 finish_iso2022jp_encoder,
330 iso2022jp_encoder_reset_sequence_size, finish_iso2022jp_encoder
334 fun_so_stateless_iso2022jp_to_eucjp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
341 static const rb_transcoder
342 rb_stateless_iso2022jp_to_eucjp = {
343 "stateless-ISO-2022-JP", "EUC-JP", stateless_iso2022jp_to_eucjp,
344 TRANSCODE_TABLE_INFO,
345 1, /* input_unit_length */
348 asciicompat_converter, /* asciicompat_type */
349 0, NULL, NULL, /* state_size, state_init, state_fini */
350 NULL, NULL, NULL, fun_so_stateless_iso2022jp_to_eucjp,
354 fun_so_eucjp_to_stateless_iso2022jp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
356 o[0] = EMACS_MULE_LEADING_CODE_JISX0208_1983;
362 static const rb_transcoder
363 rb_eucjp_to_stateless_iso2022jp = {
364 "EUC-JP", "stateless-ISO-2022-JP", eucjp_to_stateless_iso2022jp,
365 TRANSCODE_TABLE_INFO,
366 1, /* input_unit_length */
369 asciicompat_converter, /* asciicompat_type */
370 0, NULL, NULL, /* state_size, state_init, state_fini */
371 NULL, NULL, NULL, fun_so_eucjp_to_stateless_iso2022jp,
377 rb_register_transcoder(&rb_iso2022jp_decoder);
378 rb_register_transcoder(&rb_iso2022jp_encoder);
379 rb_register_transcoder(&rb_stateless_iso2022jp_to_eucjp);
380 rb_register_transcoder(&rb_eucjp_to_stateless_iso2022jp);