Ruby  1.9.3p547(2014-05-14revision45962)
iso2022.c
Go to the documentation of this file.
1 /* autogenerated. */
2 /* src="transcode-tblgen.rb", len=28123, checksum=30477 */
3 /* src="iso2022.trans", len=15906, checksum=38089 */
4 
5 #include "transcode_data.h"
6 
7 
8 
9 static const unsigned char
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_A1toFE_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 #define cp50221_decoder_1B_28_offsets 751
85 66, 74,
86  1, 0, 0, 0, 0, 0, 0, 1, 1,
87 
88 #define cp50221_decoder_offsets 762
89 0, 223,
90  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
91  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
92  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
93  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
94  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
95  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
96  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
98  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
99  0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
100  3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
101  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
102  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
103  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
104 
105 #define cp50221_encoder_offsets 988
106 0, 254,
107  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
108  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
109  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
110  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
111  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
112  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
113  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
114  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
115  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
116  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
117  2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
118  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
119  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
120  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
121  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
122  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
123 
124 };
125 static const unsigned int
127 #define iso2022jp_decoder_1B_24_infos WORDINDEX2INFO(0)
128  INVALID, FUNso,
129 
130 #define iso2022jp_decoder_1B_24 WORDINDEX2INFO(2)
133 
134 #define iso2022jp_decoder_1B_28 WORDINDEX2INFO(4)
137 
138 #define iso2022jp_decoder_1B_infos WORDINDEX2INFO(6)
141 
142 #define iso2022jp_decoder_1B WORDINDEX2INFO(9)
145 
146 #define iso2022jp_decoder_infos WORDINDEX2INFO(11)
147  FUNsi, INVALID,
149 
150 #define iso2022jp_decoder WORDINDEX2INFO(14)
153 
154 #define iso2022jp_decoder_jisx0208_rest WORDINDEX2INFO(16)
157 
158 #define iso2022jp_encoder_90_A1toFE WORDINDEX2INFO(18)
161 
162 #define iso2022jp_encoder_90_infos WORDINDEX2INFO(20)
164 
165 #define iso2022jp_encoder_90 WORDINDEX2INFO(22)
168 
169 #define iso2022jp_encoder_infos WORDINDEX2INFO(24)
170  FUNso, INVALID,
172 
173 #define iso2022jp_encoder WORDINDEX2INFO(27)
176 
177 #define stateless_iso2022jp_to_eucjp_infos WORDINDEX2INFO(29)
178  NOMAP, INVALID,
180 
181 #define stateless_iso2022jp_to_eucjp WORDINDEX2INFO(32)
184 
185 #define eucjp_to_stateless_iso2022jp_8E_infos WORDINDEX2INFO(34)
186  INVALID, UNDEF,
187 
188 #define eucjp_to_stateless_iso2022jp_8E WORDINDEX2INFO(36)
191 
192 #define eucjp_to_stateless_iso2022jp_8F_infos WORDINDEX2INFO(38)
194 
195 #define eucjp_to_stateless_iso2022jp_8F WORDINDEX2INFO(40)
198 
199 #define eucjp_to_stateless_iso2022jp_infos WORDINDEX2INFO(42)
200  NOMAP, UNDEF,
203 
204 #define eucjp_to_stateless_iso2022jp WORDINDEX2INFO(48)
207 
208 #define cp50221_decoder_1B_28 WORDINDEX2INFO(50)
211 
212 #define cp50221_decoder_1B_infos WORDINDEX2INFO(52)
215 
216 #define cp50221_decoder_1B WORDINDEX2INFO(55)
219 
220 #define cp50221_decoder_infos WORDINDEX2INFO(57)
221  FUNsi, FUNso,
223 
224 #define cp50221_decoder WORDINDEX2INFO(61)
227 
228 #define cp50221_encoder_infos WORDINDEX2INFO(63)
229  FUNso, UNDEF,
231 
232 #define cp50221_encoder WORDINDEX2INFO(67)
235 
236 };
237 #define TRANSCODE_TABLE_INFO iso2022_byte_array, 1245, iso2022_word_array, 69, ((int)sizeof(unsigned int))
238 
239 
240 #define G0_ASCII 0
241 /* ignore JIS X 0201 latin */
242 #define G0_JISX0208_1978 1
243 #define G0_JISX0208_1983 2
244 #define G0_JISX0201_KATAKANA 3
245 
246 #define EMACS_MULE_LEADING_CODE_JISX0208_1978 0220
247 #define EMACS_MULE_LEADING_CODE_JISX0208_1983 0222
248 
249 static int
250 iso2022jp_init(void *statep)
251 {
252  unsigned char *sp = statep;
253  *sp = G0_ASCII;
254  return 0;
255 }
256 
257 static VALUE
258 fun_si_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l)
259 {
260  unsigned char *sp = statep;
261  if (*sp == G0_ASCII)
262  return (VALUE)NOMAP;
263  else if (0x21 <= s[0] && s[0] <= 0x7e)
265  else
266  return (VALUE)INVALID;
267 }
268 
269 static ssize_t
270 fun_so_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l, unsigned char* o, size_t osize)
271 {
272  unsigned char *sp = statep;
273  if (s[0] == 0x1b) {
274  if (s[1] == '(') {
275  switch (s[l-1]) {
276  case 'B':
277  case 'J':
278  *sp = G0_ASCII;
279  break;
280  }
281  }
282  else {
283  switch (s[l-1]) {
284  case '@':
285  *sp = G0_JISX0208_1978;
286  break;
287 
288  case 'B':
289  *sp = G0_JISX0208_1983;
290  break;
291  }
292  }
293  return 0;
294  }
295  else {
296  if (*sp == G0_JISX0208_1978)
298  else
300  o[1] = s[0] | 0x80;
301  o[2] = s[1] | 0x80;
302  return 3;
303  }
304 }
305 
306 static const rb_transcoder
308  "ISO-2022-JP", "stateless-ISO-2022-JP", iso2022jp_decoder,
310  1, /* input_unit_length */
311  3, /* max_input */
312  3, /* max_output */
313  asciicompat_decoder, /* asciicompat_type */
314  1, iso2022jp_init, iso2022jp_init, /* state_size, state_init, state_fini */
316 };
317 
318 static ssize_t
319 fun_so_iso2022jp_encoder(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
320 {
321  unsigned char *sp = statep;
322  unsigned char *output0 = o;
323  int newstate;
324 
325  if (l == 1)
326  newstate = G0_ASCII;
327  else if (s[0] == EMACS_MULE_LEADING_CODE_JISX0208_1978)
328  newstate = G0_JISX0208_1978;
329  else
330  newstate = G0_JISX0208_1983;
331 
332  if (*sp != newstate) {
333  if (newstate == G0_ASCII) {
334  *o++ = 0x1b;
335  *o++ = '(';
336  *o++ = 'B';
337  }
338  else if (newstate == G0_JISX0208_1978) {
339  *o++ = 0x1b;
340  *o++ = '$';
341  *o++ = '@';
342  }
343  else {
344  *o++ = 0x1b;
345  *o++ = '$';
346  *o++ = 'B';
347  }
348  *sp = newstate;
349  }
350 
351  if (l == 1) {
352  *o++ = s[0] & 0x7f;
353  }
354  else {
355  *o++ = s[1] & 0x7f;
356  *o++ = s[2] & 0x7f;
357  }
358 
359  return o - output0;
360 }
361 
362 static ssize_t
364 {
365  unsigned char *sp = statep;
366  if (*sp != G0_ASCII)
367  return 3;
368  return 0;
369 }
370 
371 static ssize_t
372 finish_iso2022jp_encoder(void *statep, unsigned char *o, size_t osize)
373 {
374  unsigned char *sp = statep;
375  unsigned char *output0 = o;
376 
377  if (*sp == G0_ASCII)
378  return 0;
379 
380  *o++ = 0x1b;
381  *o++ = '(';
382  *o++ = 'B';
383  *sp = G0_ASCII;
384 
385  return o - output0;
386 }
387 
388 static const rb_transcoder
390  "stateless-ISO-2022-JP", "ISO-2022-JP", iso2022jp_encoder,
392  1, /* input_unit_length */
393  3, /* max_input */
394  5, /* max_output */
395  asciicompat_encoder, /* asciicompat_type */
396  1, iso2022jp_init, iso2022jp_init, /* state_size, state_init, state_fini */
399  iso2022jp_encoder_reset_sequence_size, finish_iso2022jp_encoder
400 };
401 
402 static ssize_t
403 fun_so_stateless_iso2022jp_to_eucjp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
404 {
405  o[0] = s[1];
406  o[1] = s[2];
407  return 2;
408 }
409 
410 static const rb_transcoder
412  "stateless-ISO-2022-JP", "EUC-JP", stateless_iso2022jp_to_eucjp,
414  1, /* input_unit_length */
415  3, /* max_input */
416  2, /* max_output */
417  asciicompat_converter, /* asciicompat_type */
418  0, NULL, NULL, /* state_size, state_init, state_fini */
420 };
421 
422 static ssize_t
423 fun_so_eucjp_to_stateless_iso2022jp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
424 {
426  o[1] = s[0];
427  o[2] = s[1];
428  return 3;
429 }
430 
431 static const rb_transcoder
433  "EUC-JP", "stateless-ISO-2022-JP", eucjp_to_stateless_iso2022jp,
435  1, /* input_unit_length */
436  3, /* max_input */
437  3, /* max_output */
438  asciicompat_converter, /* asciicompat_type */
439  0, NULL, NULL, /* state_size, state_init, state_fini */
441 };
442 
443 static VALUE
444 fun_si_cp50221_decoder(void *statep, const unsigned char *s, size_t l)
445 {
446  unsigned char *sp = statep;
447  int c;
448  switch (*sp) {
449  case G0_ASCII:
450  if (0xA1 <= s[0] && s[0] <= 0xDF)
451  return (VALUE)FUNso;
452  return (VALUE)NOMAP;
454  c = s[0] & 0x7F;
455  if (0x21 <= c && c <= 0x5f)
456  return (VALUE)FUNso;
457  break;
458  case G0_JISX0208_1978:
459  if ((0x21 <= s[0] && s[0] <= 0x28) || (0x30 <= s[0] && s[0] <= 0x74))
461  break;
462  case G0_JISX0208_1983:
463  if ((0x21 <= s[0] && s[0] <= 0x28) ||
464  s[0] == 0x2D ||
465  (0x30 <= s[0] && s[0] <= 0x74) ||
466  (0x79 <= s[0] && s[0] <= 0x7C))
467  /* 0x7F <= s[0] && s[0] <= 0x92) */
469  break;
470  }
471  return (VALUE)INVALID;
472 }
473 
474 static ssize_t
475 fun_so_cp50221_decoder(void *statep, const unsigned char *s, size_t l, unsigned char* o, size_t osize)
476 {
477  unsigned char *sp = statep;
478  switch (s[0]) {
479  case 0x1b:
480  if (s[1] == '(') {
481  switch (s[l-1]) {
482  case 'B':
483  case 'J':
484  *sp = G0_ASCII;
485  break;
486  case 'I':
487  *sp = G0_JISX0201_KATAKANA;
488  break;
489  }
490  }
491  else {
492  switch (s[l-1]) {
493  case '@':
494  *sp = G0_JISX0208_1978;
495  break;
496  case 'B':
497  *sp = G0_JISX0208_1983;
498  break;
499  }
500  }
501  return 0;
502  case 0x0E:
503  *sp = G0_JISX0201_KATAKANA;
504  return 0;
505  case 0x0F:
506  *sp = G0_ASCII;
507  return 0;
508  default:
509  if (*sp == G0_JISX0201_KATAKANA ||
510  (0xA1 <= s[0] && s[0] <= 0xDF && *sp == G0_ASCII)) {
511  o[0] = 0x8E;
512  o[1] = s[0] | 0x80;
513  }
514  /* else if (0x7F == s[0] && s[0] <= 0x88) { */
515  /* User Defined Characters */
516  /* o[n++] = s[0] | 0xE0; */
517  /* o[n++] = s[1] | 0x80; */
518  /* else if (0x89 <= s[0] && s[0] <= 0x92) { */
519  /* User Defined Characters 2 */
520  /* o[n++] = 0x8f; */
521  /* o[n++] = s[0] + 0x6C; */
522  /* o[n++] = s[1] | 0x80; */
523  /* } */
524  else {
525  /* JIS X 0208 */
526  /* NEC Special Characters */
527  /* NEC-selected IBM extended Characters */
528  o[0] = s[0] | 0x80;
529  o[1] = s[1] | 0x80;
530  }
531  return 2;
532  }
533 }
534 
535 static const rb_transcoder
537  "CP50220", "cp51932", cp50221_decoder,
539  1, /* input_unit_length */
540  3, /* max_input */
541  3, /* max_output */
542  asciicompat_decoder, /* asciicompat_type */
543  1, iso2022jp_init, iso2022jp_init, /* state_size, state_init, state_fini */
545 };
546 
547 static const rb_transcoder
549  "CP50221", "cp51932", cp50221_decoder,
551  1, /* input_unit_length */
552  3, /* max_input */
553  3, /* max_output */
554  asciicompat_decoder, /* asciicompat_type */
555  1, iso2022jp_init, iso2022jp_init, /* state_size, state_init, state_fini */
557 };
558 
559 static ssize_t
560 fun_so_cp5022x_encoder(void *statep, const unsigned char *s, size_t l,
561  unsigned char *o, size_t osize)
562 {
563  unsigned char *sp = statep;
564  unsigned char *output0 = o;
565  int newstate;
566 
567  if (l == 1)
568  newstate = G0_ASCII;
569  else if (s[0] == 0x8E) {
570  s++;
571  l = 1;
572  newstate = G0_JISX0201_KATAKANA;
573  }
574  else
575  newstate = G0_JISX0208_1983;
576 
577  if (*sp != newstate) {
578  if (newstate == G0_ASCII) {
579  *o++ = 0x1b;
580  *o++ = '(';
581  *o++ = 'B';
582  }
583  else if (newstate == G0_JISX0201_KATAKANA) {
584  *o++ = 0x1b;
585  *o++ = '(';
586  *o++ = 'I';
587  }
588  else {
589  *o++ = 0x1b;
590  *o++ = '$';
591  *o++ = 'B';
592  }
593  *sp = newstate;
594  }
595 
596  if (l == 1) {
597  *o++ = s[0] & 0x7f;
598  }
599  else {
600  *o++ = s[0] & 0x7f;
601  *o++ = s[1] & 0x7f;
602  }
603 
604  return o - output0;
605 }
606 
607 static const rb_transcoder
609  "CP51932", "CP50221", cp50221_encoder,
611  1, /* input_unit_length */
612  3, /* max_input */
613  5, /* max_output */
614  asciicompat_encoder, /* asciicompat_type */
615  1, iso2022jp_init, iso2022jp_init, /* state_size, state_init, state_fini */
618  iso2022jp_encoder_reset_sequence_size, finish_iso2022jp_encoder
619 };
620 
621 static const char *tbl0208 =
622  "\x21\x23\x21\x56\x21\x57\x21\x22\x21\x26\x25\x72\x25\x21\x25\x23" \
623  "\x25\x25\x25\x27\x25\x29\x25\x63\x25\x65\x25\x67\x25\x43\x21\x3C" \
624  "\x25\x22\x25\x24\x25\x26\x25\x28\x25\x2A\x25\x2B\x25\x2D\x25\x2F" \
625  "\x25\x31\x25\x33\x25\x35\x25\x37\x25\x39\x25\x3B\x25\x3D\x25\x3F" \
626  "\x25\x41\x25\x44\x25\x46\x25\x48\x25\x4A\x25\x4B\x25\x4C\x25\x4D" \
627  "\x25\x4E\x25\x4F\x25\x52\x25\x55\x25\x58\x25\x5B\x25\x5E\x25\x5F" \
628  "\x25\x60\x25\x61\x25\x62\x25\x64\x25\x66\x25\x68\x25\x69\x25\x6A" \
629  "\x25\x6B\x25\x6C\x25\x6D\x25\x6F\x25\x73\x21\x2B\x21\x2C";
630 
631 static ssize_t
632 fun_so_cp50220_encoder(void *statep, const unsigned char *s, size_t l,
633  unsigned char *o, size_t osize)
634 {
635  unsigned char *output0 = o;
636  unsigned char *sp = statep;
637 
638  if (sp[0] == G0_JISX0201_KATAKANA) {
639  int c = sp[2] & 0x7F;
640  const char *p = tbl0208 + (c - 0x21) * 2;
641  if (sp[1] != G0_JISX0208_1983) {
642  *o++ = 0x1b;
643  *o++ = '$';
644  *o++ = 'B';
645  }
646  sp[0] = G0_JISX0208_1983;
647  *o++ = *p++;
648  if (l == 2 && s[0] == 0x8E) {
649  if (s[1] == 0xDE) {
650  *o++ = *p + 1;
651  return o - output0;
652  }
653  else if (s[1] == 0xDF && (0x4A <= c && c <= 0x4E)) {
654  *o++ = *p + 2;
655  return o - output0;
656  }
657  }
658  *o++ = *p;
659  }
660 
661  if (l == 2 && s[0] == 0x8E) {
662  const char *p = tbl0208 + (s[1] - 0xA1) * 2;
663  if ((0xA1 <= s[1] && s[1] <= 0xB5) ||
664  (0xC5 <= s[1] && s[1] <= 0xC9) ||
665  (0xCF <= s[1] && s[1] <= 0xDF)) {
666  if (*sp != G0_JISX0208_1983) {
667  *o++ = 0x1b;
668  *o++ = '$';
669  *o++ = 'B';
670  *sp = G0_JISX0208_1983;
671  }
672  *o++ = *p++;
673  *o++ = *p;
674  return o - output0;
675  }
676 
677  sp[2] = s[1];
678  sp[1] = sp[0];
679  sp[0] = G0_JISX0201_KATAKANA;
680  return o - output0;
681  }
682 
683  o += fun_so_cp5022x_encoder(statep, s, l, o, osize);
684  return o - output0;
685 }
686 
687 static ssize_t
688 finish_cp50220_encoder(void *statep, unsigned char *o, size_t osize)
689 {
690  unsigned char *sp = statep;
691  unsigned char *output0 = o;
692 
693  if (*sp == G0_ASCII)
694  return 0;
695 
696  if (sp[0] == G0_JISX0201_KATAKANA) {
697  int c = sp[2] & 0x7F;
698  const char *p = tbl0208 + (c - 0x21) * 2;
699  if (sp[1] != G0_JISX0208_1983) {
700  *o++ = 0x1b;
701  *o++ = '$';
702  *o++ = 'B';
703  }
704  sp[0] = G0_JISX0208_1983;
705  *o++ = *p++;
706  *o++ = *p;
707  }
708 
709  *o++ = 0x1b;
710  *o++ = '(';
711  *o++ = 'B';
712  *sp = G0_ASCII;
713 
714  return o - output0;
715 }
716 
717 static const rb_transcoder
719  "CP51932", "CP50220", cp50221_encoder,
721  1, /* input_unit_length */
722  3, /* max_input */
723  5, /* max_output */
724  asciicompat_encoder, /* asciicompat_type */
725  3, iso2022jp_init, iso2022jp_init, /* state_size, state_init, state_fini */
728  iso2022jp_encoder_reset_sequence_size, finish_cp50220_encoder
729 };
730 
731 void
733 {
742 }
743 
744 
static const rb_transcoder rb_iso2022jp_decoder
Definition: iso2022.c:307
static ssize_t fun_so_stateless_iso2022jp_to_eucjp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
Definition: iso2022.c:403
#define NOMAP
#define iso2022jp_decoder_1B_24_infos
#define iso2022jp_decoder_offsets
static const rb_transcoder rb_eucjp_to_stateless_iso2022jp
Definition: iso2022.c:432
#define iso2022jp_decoder_1B_24_offsets
#define iso2022jp_decoder_infos
static ssize_t finish_iso2022jp_encoder(void *statep, unsigned char *o, size_t osize)
Definition: iso2022.c:372
#define cp50221_decoder_1B_infos
static const char * tbl0208
Definition: iso2022.c:621
#define G0_ASCII
Definition: iso2022.c:240
#define UNDEF
#define iso2022jp_encoder_offsets
#define cp50221_encoder_infos
static ssize_t fun_so_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
Definition: iso2022.c:270
#define cp50221_decoder_offsets
#define cp50221_decoder_1B_28_offsets
static ssize_t fun_so_cp50220_encoder(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
Definition: iso2022.c:632
#define eucjp_to_stateless_iso2022jp_8F
static VALUE fun_si_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l)
Definition: iso2022.c:258
#define cp50221_decoder
#define cp50221_decoder_infos
static const rb_transcoder rb_iso2022jp_encoder
Definition: iso2022.c:389
Win32OLEIDispatch * p
Definition: win32ole.c:778
#define eucjp_to_stateless_iso2022jp_infos
#define iso2022jp_decoder_jisx0208_rest
#define eucjp_to_stateless_iso2022jp_8E_infos
static const rb_transcoder rb_cp50221_decoder
Definition: iso2022.c:548
#define iso2022jp_decoder
#define iso2022jp_decoder_1B_28_offsets
static ssize_t iso2022jp_encoder_reset_sequence_size(void *statep)
Definition: iso2022.c:363
#define eucjp_to_stateless_iso2022jp
#define cp50221_decoder_1B
static const rb_transcoder rb_cp50221_encoder
Definition: iso2022.c:608
#define cp50221_encoder_offsets
static const unsigned int iso2022_word_array[69]
Definition: iso2022.c:126
static ssize_t fun_so_cp5022x_encoder(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
Definition: iso2022.c:560
static ssize_t fun_so_iso2022jp_encoder(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
Definition: iso2022.c:319
#define iso2022jp_encoder_90
#define iso2022jp_encoder_90_infos
static const rb_transcoder rb_cp50220_encoder
Definition: iso2022.c:718
static ssize_t fun_so_eucjp_to_stateless_iso2022jp(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
Definition: iso2022.c:423
#define eucjp_to_stateless_iso2022jp_offsets
void rb_register_transcoder(const rb_transcoder *tr)
Definition: transcode.c:205
#define iso2022jp_decoder_1B_infos
#define FUNso
#define iso2022jp_encoder_90_A1toFE_offsets
#define iso2022jp_decoder_1B_24
#define stateless_iso2022jp_to_eucjp_infos
#define iso2022jp_encoder_90_A1toFE
unsigned long VALUE
Definition: ruby.h:88
#define G0_JISX0201_KATAKANA
Definition: iso2022.c:244
static int iso2022jp_init(void *statep)
Definition: iso2022.c:250
#define G0_JISX0208_1983
Definition: iso2022.c:243
#define FUNsi
#define iso2022jp_decoder_1B_28
#define INVALID
#define cp50221_decoder_1B_28
#define stateless_iso2022jp_to_eucjp
#define EMACS_MULE_LEADING_CODE_JISX0208_1983
Definition: iso2022.c:247
#define TRANSCODE_TABLE_INFO
Definition: iso2022.c:237
#define eucjp_to_stateless_iso2022jp_8E
#define eucjp_to_stateless_iso2022jp_8F_infos
void Init_iso2022(void)
Definition: iso2022.c:732
static const unsigned char iso2022_byte_array[1245]
Definition: iso2022.c:10
#define iso2022jp_decoder_1B
#define iso2022jp_decoder_1B_offsets
#define iso2022jp_decoder_jisx0208_rest_offsets
static const rb_transcoder rb_stateless_iso2022jp_to_eucjp
Definition: iso2022.c:411
static ssize_t finish_cp50220_encoder(void *statep, unsigned char *o, size_t osize)
Definition: iso2022.c:688
#define G0_JISX0208_1978
Definition: iso2022.c:242
static ssize_t fun_so_cp50221_decoder(void *statep, const unsigned char *s, size_t l, unsigned char *o, size_t osize)
Definition: iso2022.c:475
#define NULL
Definition: _sdbm.c:107
#define iso2022jp_encoder
#define EMACS_MULE_LEADING_CODE_JISX0208_1978
Definition: iso2022.c:246
static const rb_transcoder rb_cp50220_decoder
Definition: iso2022.c:536
#define iso2022jp_encoder_infos
static VALUE fun_si_cp50221_decoder(void *statep, const unsigned char *s, size_t l)
Definition: iso2022.c:444
#define cp50221_encoder