Mercurial > hg > xemacs-beta
comparison src/mule-coding.c @ 213:78f53ef88e17 r20-4b5
Import from CVS: tag r20-4b5
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:06:47 +0200 |
parents | 41ff10fd062f |
children | f955c73f5258 |
comparison
equal
deleted
inserted
replaced
212:d8688acf4c5b | 213:78f53ef88e17 |
---|---|
28 | 28 |
29 #include "buffer.h" | 29 #include "buffer.h" |
30 #include "elhash.h" | 30 #include "elhash.h" |
31 #include "insdel.h" | 31 #include "insdel.h" |
32 #include "lstream.h" | 32 #include "lstream.h" |
33 #include "mule-ccl.h" | |
33 #include "mule-coding.h" | 34 #include "mule-coding.h" |
34 | 35 |
35 Lisp_Object Qbuffer_file_coding_system, Qcoding_system_error; | 36 Lisp_Object Qbuffer_file_coding_system, Qcoding_system_error; |
36 | 37 |
37 Lisp_Object Vkeyboard_coding_system; | 38 Lisp_Object Vkeyboard_coding_system; |
1808 XSETCODING_SYSTEM (coding_system, str->codesys); | 1809 XSETCODING_SYSTEM (coding_system, str->codesys); |
1809 reset_iso2022 (coding_system, &str->iso2022); | 1810 reset_iso2022 (coding_system, &str->iso2022); |
1810 } | 1811 } |
1811 else if (CODING_SYSTEM_TYPE (str->codesys) == CODESYS_CCL) | 1812 else if (CODING_SYSTEM_TYPE (str->codesys) == CODESYS_CCL) |
1812 { | 1813 { |
1813 set_ccl_program (&str->ccl, CODING_SYSTEM_CCL_DECODE (str->codesys), | 1814 setup_ccl_program (&str->ccl, CODING_SYSTEM_CCL_DECODE (str->codesys)); |
1814 0, 0, 0); | |
1815 } | 1815 } |
1816 | 1816 |
1817 str->flags = str->ch = 0; | 1817 str->flags = str->ch = 0; |
1818 } | 1818 } |
1819 | 1819 |
1983 break; | 1983 break; |
1984 case CODESYS_BIG5: | 1984 case CODESYS_BIG5: |
1985 decode_coding_big5 (decoding, src, dst, n); | 1985 decode_coding_big5 (decoding, src, dst, n); |
1986 break; | 1986 break; |
1987 case CODESYS_CCL: | 1987 case CODESYS_CCL: |
1988 ccl_driver (&str->ccl, src, dst, n, (str->flags) & CODING_STATE_END); | 1988 ccl_driver (&str->ccl, src, dst, n, 0); |
1989 break; | 1989 break; |
1990 case CODESYS_ISO2022: | 1990 case CODESYS_ISO2022: |
1991 decode_coding_iso2022 (decoding, src, dst, n); | 1991 decode_coding_iso2022 (decoding, src, dst, n); |
1992 break; | 1992 break; |
1993 default: | 1993 default: |
2261 str->iso2022.current_half = 0; | 2261 str->iso2022.current_half = 0; |
2262 str->iso2022.current_char_boundary = 1; | 2262 str->iso2022.current_char_boundary = 1; |
2263 break; | 2263 break; |
2264 } | 2264 } |
2265 case CODESYS_CCL: | 2265 case CODESYS_CCL: |
2266 set_ccl_program (&str->ccl, CODING_SYSTEM_CCL_ENCODE (str->codesys), 0, 0, 0); | 2266 setup_ccl_program (&str->ccl, CODING_SYSTEM_CCL_ENCODE (str->codesys)); |
2267 break; | 2267 break; |
2268 default: | 2268 default: |
2269 break; | 2269 break; |
2270 } | 2270 } |
2271 | 2271 |
2383 break; | 2383 break; |
2384 case CODESYS_BIG5: | 2384 case CODESYS_BIG5: |
2385 encode_coding_big5 (encoding, src, dst, n); | 2385 encode_coding_big5 (encoding, src, dst, n); |
2386 break; | 2386 break; |
2387 case CODESYS_CCL: | 2387 case CODESYS_CCL: |
2388 ccl_driver (&str->ccl, src, dst, n, (str->flags) & CODING_STATE_END); | 2388 ccl_driver (&str->ccl, src, dst, n, 0); |
2389 break; | 2389 break; |
2390 case CODESYS_ISO2022: | 2390 case CODESYS_ISO2022: |
2391 encode_coding_iso2022 (encoding, src, dst, n); | 2391 encode_coding_iso2022 (encoding, src, dst, n); |
2392 break; | 2392 break; |
2393 default: | 2393 default: |
2493 #define BYTE_SJIS_TWO_BYTE_2_P(c) \ | 2493 #define BYTE_SJIS_TWO_BYTE_2_P(c) \ |
2494 (((c) >= 0x40 && (c) <= 0x7E) || ((c) >= 0x80 && (c) <= 0xFC)) | 2494 (((c) >= 0x40 && (c) <= 0x7E) || ((c) >= 0x80 && (c) <= 0xFC)) |
2495 | 2495 |
2496 #define BYTE_SJIS_KATAKANA_P(c) \ | 2496 #define BYTE_SJIS_KATAKANA_P(c) \ |
2497 ((c) >= 0xA1 && (c) <= 0xDF) | 2497 ((c) >= 0xA1 && (c) <= 0xDF) |
2498 | |
2499 /* Code conversion macros. These are macros because they are used in | |
2500 inner loops during code conversion. | |
2501 | |
2502 Note that temporary variables in macros introduce the classic | |
2503 dynamic-scoping problems with variable names. We use capital- | |
2504 lettered variables in the assumption that XEmacs does not use | |
2505 capital letters in variables except in a very formalized way | |
2506 (e.g. Qstring). */ | |
2507 | |
2508 /* Convert shift-JIS code (sj1, sj2) into internal string | |
2509 representation (c1, c2). (The leading byte is assumed.) */ | |
2510 | |
2511 #define DECODE_SJIS(sj1, sj2, c1, c2) \ | |
2512 do { \ | |
2513 int I1 = sj1, I2 = sj2; \ | |
2514 if (I2 >= 0x9f) \ | |
2515 c1 = (I1 << 1) - ((I1 >= 0xe0) ? 0xe0 : 0x60), \ | |
2516 c2 = I2 + 2; \ | |
2517 else \ | |
2518 c1 = (I1 << 1) - ((I1 >= 0xe0) ? 0xe1 : 0x61), \ | |
2519 c2 = I2 + ((I2 >= 0x7f) ? 0x60 : 0x61); \ | |
2520 } while (0) | |
2521 | |
2522 /* Convert the internal string representation of a Shift-JIS character | |
2523 (c1, c2) into Shift-JIS code (sj1, sj2). The leading byte is | |
2524 assumed. */ | |
2525 | |
2526 #define ENCODE_SJIS(c1, c2, sj1, sj2) \ | |
2527 do { \ | |
2528 int I1 = c1, I2 = c2; \ | |
2529 if (I1 & 1) \ | |
2530 sj1 = (I1 >> 1) + ((I1 < 0xdf) ? 0x31 : 0x71), \ | |
2531 sj2 = I2 - ((I2 >= 0xe0) ? 0x60 : 0x61); \ | |
2532 else \ | |
2533 sj1 = (I1 >> 1) + ((I1 < 0xdf) ? 0x30 : 0x70), \ | |
2534 sj2 = I2 - 2; \ | |
2535 } while (0) | |
2536 | 2498 |
2537 static int | 2499 static int |
2538 detect_coding_sjis (struct detection_state *st, CONST unsigned char *src, | 2500 detect_coding_sjis (struct detection_state *st, CONST unsigned char *src, |
2539 unsigned int n) | 2501 unsigned int n) |
2540 { | 2502 { |