OSDN Git Service

ruby-1.9.1-rc1
[splhack/AndroidRuby.git] / lib / ruby-1.9.1-rc1 / enc / trans / iso2022.c
1 /* autogenerated. */
2 /* src="transcode-tblgen.rb", len=20916, checksum=45137 */
3 /* src="iso2022.trans", len=6668, checksum=25414 */
4
5 #include "transcode_data.h"
6
7
8
9 static const unsigned char
10 iso2022_byte_array[751] = {
11 #define iso2022jp_decoder_1B_24_offsets 0
12 64, 66,
13       1,  0,  1,
14
15 #define iso2022jp_decoder_1B_28_offsets 5
16 66, 74,
17       1,  0,  0,  0,  0,  0,  0,  0,    1,
18
19 #define iso2022jp_decoder_1B_offsets 16
20 36, 40,
21       1,  0,  0,  0,  2,
22
23 #define iso2022jp_decoder_offsets 23
24 0, 127,
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,
33
34 #define iso2022jp_decoder_jisx0208_rest_offsets 153
35 33, 126,
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,
42
43 #define iso2022jp_encoder_90_A1_offsets 249
44 161, 254,
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,
51
52 #define iso2022jp_encoder_offsets 345
53 0, 146,
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,
63       2,  1,  2,
64
65 #define eucjp_to_stateless_iso2022jp_offsets 494
66 0, 254,
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,
83
84 };
85 static const unsigned int
86 iso2022_word_array[50] = {
87 #define iso2022jp_decoder_1B_24_infos WORDINDEX2INFO(0)
88      INVALID,   FUNso,
89
90 #define iso2022jp_decoder_1B_24 WORDINDEX2INFO(2)
91     iso2022jp_decoder_1B_24_offsets,
92     iso2022jp_decoder_1B_24_infos,
93
94 #define iso2022jp_decoder_1B_28 WORDINDEX2INFO(4)
95     iso2022jp_decoder_1B_28_offsets,
96     iso2022jp_decoder_1B_24_infos,
97
98 #define iso2022jp_decoder_1B_infos WORDINDEX2INFO(6)
99                      INVALID, iso2022jp_decoder_1B_24,
100      iso2022jp_decoder_1B_28,
101
102 #define iso2022jp_decoder_1B WORDINDEX2INFO(9)
103     iso2022jp_decoder_1B_offsets,
104     iso2022jp_decoder_1B_infos,
105
106 #define iso2022jp_decoder_infos WORDINDEX2INFO(11)
107                     FUNsi,              INVALID,
108      iso2022jp_decoder_1B,
109
110 #define iso2022jp_decoder WORDINDEX2INFO(14)
111     iso2022jp_decoder_offsets,
112     iso2022jp_decoder_infos,
113
114 #define iso2022jp_decoder_jisx0208_rest WORDINDEX2INFO(16)
115     iso2022jp_decoder_jisx0208_rest_offsets,
116     iso2022jp_decoder_1B_24_infos,
117
118 #define iso2022jp_encoder_90_A1 WORDINDEX2INFO(18)
119     iso2022jp_encoder_90_A1_offsets,
120     iso2022jp_decoder_1B_24_infos,
121
122 #define iso2022jp_encoder_90_infos WORDINDEX2INFO(20)
123                      INVALID, iso2022jp_encoder_90_A1,
124
125 #define iso2022jp_encoder_90 WORDINDEX2INFO(22)
126     iso2022jp_encoder_90_A1_offsets,
127     iso2022jp_encoder_90_infos,
128
129 #define iso2022jp_encoder_infos WORDINDEX2INFO(24)
130                     FUNso,              INVALID,
131      iso2022jp_encoder_90,
132
133 #define iso2022jp_encoder WORDINDEX2INFO(27)
134     iso2022jp_encoder_offsets,
135     iso2022jp_encoder_infos,
136
137 #define stateless_iso2022jp_to_eucjp_infos WORDINDEX2INFO(29)
138                     NOMAP,              INVALID,
139      iso2022jp_encoder_90,
140
141 #define stateless_iso2022jp_to_eucjp WORDINDEX2INFO(32)
142     iso2022jp_encoder_offsets,
143     stateless_iso2022jp_to_eucjp_infos,
144
145 #define eucjp_to_stateless_iso2022jp_8E_infos WORDINDEX2INFO(34)
146      INVALID,   UNDEF,
147
148 #define eucjp_to_stateless_iso2022jp_8E WORDINDEX2INFO(36)
149     iso2022jp_encoder_90_A1_offsets,
150     eucjp_to_stateless_iso2022jp_8E_infos,
151
152 #define eucjp_to_stateless_iso2022jp_8F_infos WORDINDEX2INFO(38)
153                              INVALID, eucjp_to_stateless_iso2022jp_8E,
154
155 #define eucjp_to_stateless_iso2022jp_8F WORDINDEX2INFO(40)
156     iso2022jp_encoder_90_A1_offsets,
157     eucjp_to_stateless_iso2022jp_8F_infos,
158
159 #define eucjp_to_stateless_iso2022jp_infos WORDINDEX2INFO(42)
160                                NOMAP,                           UNDEF,
161                              INVALID, eucjp_to_stateless_iso2022jp_8E,
162      eucjp_to_stateless_iso2022jp_8F,         iso2022jp_encoder_90_A1,
163
164 #define eucjp_to_stateless_iso2022jp WORDINDEX2INFO(48)
165     eucjp_to_stateless_iso2022jp_offsets,
166     eucjp_to_stateless_iso2022jp_infos,
167
168 };
169 #define TRANSCODE_TABLE_INFO iso2022_byte_array, 751, iso2022_word_array, 50, sizeof(unsigned int)
170
171
172 #define G0_ASCII 0
173 /* ignore JIS X 0201 latin */
174 #define G0_JISX0208_1978 1
175 #define G0_JISX0208_1983 2
176
177 #define EMACS_MULE_LEADING_CODE_JISX0208_1978   0220
178 #define EMACS_MULE_LEADING_CODE_JISX0208_1983   0222
179
180 static int
181 iso2022jp_init(void *statep)
182 {
183     unsigned char *sp = statep;
184     *sp = G0_ASCII;
185     return 0;
186 }
187
188 static VALUE
189 fun_si_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l)
190 {
191     unsigned char *sp = statep;
192     if (*sp == G0_ASCII)
193         return (VALUE)NOMAP;
194     else if (0x21 <= s[0] && s[0] <= 0x7e)
195         return (VALUE)iso2022jp_decoder_jisx0208_rest;
196     else
197         return (VALUE)INVALID;
198 }
199
200 static ssize_t
201 fun_so_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l, unsigned char* o, size_t osize)
202 {
203     unsigned char *sp = statep;
204     if (s[0] == 0x1b) {
205         if (s[1] == '(') {
206             switch (s[l-1]) {
207               case 'B':
208               case 'J':
209                 *sp = G0_ASCII;
210                 break;
211             }
212         }
213         else {
214             switch (s[l-1]) {
215               case '@':
216                 *sp = G0_JISX0208_1978;
217                 break;
218
219               case 'B':
220                 *sp = G0_JISX0208_1983;
221                 break;
222             }
223         }
224         return 0;
225     }
226     else {
227         if (*sp == G0_JISX0208_1978)
228             o[0] = EMACS_MULE_LEADING_CODE_JISX0208_1978;
229         else
230             o[0] = EMACS_MULE_LEADING_CODE_JISX0208_1983;
231         o[1] = s[0] | 0x80;
232         o[2] = s[1] | 0x80;
233         return 3;
234     }
235 }
236
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 */
242     3, /* max_input */
243     3, /* max_output */
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
247 };
248
249 static ssize_t
250 fun_so_iso2022jp_encoder(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
251 {
252     unsigned char *sp = statep;
253     unsigned char *output0 = o;
254     int newstate;
255
256     if (l == 1)
257         newstate = G0_ASCII;
258     else if (s[0] == EMACS_MULE_LEADING_CODE_JISX0208_1978)
259         newstate = G0_JISX0208_1978;
260     else
261         newstate = G0_JISX0208_1983;
262
263     if (*sp != newstate) {
264         if (newstate == G0_ASCII) {
265             *o++ = 0x1b;
266             *o++ = '(';
267             *o++ = 'B';
268         }
269         else if (newstate == G0_JISX0208_1978) {
270             *o++ = 0x1b;
271             *o++ = '$';
272             *o++ = '@';
273         }
274         else {
275             *o++ = 0x1b;
276             *o++ = '$';
277             *o++ = 'B';
278         }
279         *sp = newstate;
280     }
281
282     if (l == 1) {
283         *o++ = s[0] & 0x7f;
284     }
285     else {
286         *o++ = s[1] & 0x7f;
287         *o++ = s[2] & 0x7f;
288     }
289
290     return o - output0;
291 }
292
293 static ssize_t
294 iso2022jp_encoder_reset_sequence_size(void *statep)
295 {
296     unsigned char *sp = statep;
297     if (*sp != G0_ASCII)
298         return 3;
299     return 0;
300 }
301
302 static ssize_t
303 finish_iso2022jp_encoder(void *statep, unsigned char *o, size_t osize)
304 {
305     unsigned char *sp = statep;
306     unsigned char *output0 = o;
307
308     if (*sp == G0_ASCII)
309         return 0;
310
311     *o++ = 0x1b;
312     *o++ = '(';
313     *o++ = 'B';
314     *sp = G0_ASCII;
315
316     return o - output0;
317 }
318
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 */
324     3, /* max_input */
325     5, /* max_output */
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
331 };
332
333 static ssize_t
334 fun_so_stateless_iso2022jp_to_eucjp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
335 {
336     o[0] = s[1];
337     o[1] = s[2];
338     return 2;
339 }
340
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 */
346     3, /* max_input */
347     2, /* max_output */
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,
351 };
352
353 static ssize_t
354 fun_so_eucjp_to_stateless_iso2022jp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
355 {
356     o[0] = EMACS_MULE_LEADING_CODE_JISX0208_1983;
357     o[1] = s[0];
358     o[2] = s[1];
359     return 3;
360 }
361
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 */
367     3, /* max_input */
368     3, /* max_output */
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,
372 };
373
374 void
375 Init_iso2022(void)
376 {
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);
381 }
382
383