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 {