Mercurial > emacs
comparison src/coding.c @ 88681:2cdfbffa8a0d
(CODING_ISO_FLAG_USE_ROMAN): New macro
(CODING_ISO_FLAG_USE_OLDJIS): New macro.
(CODING_ISO_FLAG_FULL_SUPPORT): Macro definition changed.
(setup_iso_safe_charsets): Fix arguemtns to Fassq.
(DECODE_DESIGNATION): Pay attention to CODING_ISO_FLAG_USE_ROMAN
and CODING_ISO_FLAG_USE_OLDJIS.
(ENCODE_ISO_CHARACTER_DIMENSION1): Likewise.
(ENCODE_ISO_CHARACTER_DIMENSION2): Likewise.
(encode_coding_iso_2022): Change the 1st arg to
ENCODE_ISO_CHARACTER to a variable.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 30 May 2002 11:02:01 +0000 |
parents | 0bc5868f9f61 |
children | 7f284ac55b07 |
comparison
equal
deleted
inserted
replaced
88680:e574f078b30d | 88681:2cdfbffa8a0d |
---|---|
554 | 554 |
555 #define CODING_ISO_FLAG_COMPOSITION 0x2000 | 555 #define CODING_ISO_FLAG_COMPOSITION 0x2000 |
556 | 556 |
557 #define CODING_ISO_FLAG_EUC_TW_SHIFT 0x4000 | 557 #define CODING_ISO_FLAG_EUC_TW_SHIFT 0x4000 |
558 | 558 |
559 #define CODING_ISO_FLAG_FULL_SUPPORT 0x8000 | 559 #define CODING_ISO_FLAG_USE_ROMAN 0x8000 |
560 | |
561 #define CODING_ISO_FLAG_USE_OLDJIS 0x10000 | |
562 | |
563 #define CODING_ISO_FLAG_FULL_SUPPORT 0x100000 | |
560 | 564 |
561 /* A character to be produced on output if encoding of the original | 565 /* A character to be produced on output if encoding of the original |
562 character is prohibited by CODING_ISO_FLAG_SAFE. */ | 566 character is prohibited by CODING_ISO_FLAG_SAFE. */ |
563 #define CODING_INHIBIT_CHARACTER_SUBSTITUTION '?' | 567 #define CODING_INHIBIT_CHARACTER_SUBSTITUTION '?' |
564 | 568 |
2266 Lisp_Object reg; | 2270 Lisp_Object reg; |
2267 struct charset *charset; | 2271 struct charset *charset; |
2268 | 2272 |
2269 id = XCAR (tail); | 2273 id = XCAR (tail); |
2270 charset = CHARSET_FROM_ID (XINT (id)); | 2274 charset = CHARSET_FROM_ID (XINT (id)); |
2271 reg = Fcdr (Fassq (request, id)); | 2275 reg = Fcdr (Fassq (id, request)); |
2272 if (! NILP (reg)) | 2276 if (! NILP (reg)) |
2273 XSTRING (safe_charsets)->data[XINT (id)] = XINT (reg); | 2277 XSTRING (safe_charsets)->data[XINT (id)] = XINT (reg); |
2274 else if (charset->iso_chars_96) | 2278 else if (charset->iso_chars_96) |
2275 { | 2279 { |
2276 if (reg96 < 4) | 2280 if (reg96 < 4) |
2560 { \ | 2564 { \ |
2561 CODING_ISO_DESIGNATION (coding, reg) = -2; \ | 2565 CODING_ISO_DESIGNATION (coding, reg) = -2; \ |
2562 goto invalid_code; \ | 2566 goto invalid_code; \ |
2563 } \ | 2567 } \ |
2564 prev = CODING_ISO_DESIGNATION (coding, reg); \ | 2568 prev = CODING_ISO_DESIGNATION (coding, reg); \ |
2569 if (id == charset_jisx0201_roman) \ | |
2570 { \ | |
2571 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_USE_ROMAN) \ | |
2572 id = charset_ascii; \ | |
2573 } \ | |
2574 else if (id == charset_jisx0208_1978) \ | |
2575 { \ | |
2576 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_USE_OLDJIS) \ | |
2577 id = charset_jisx0208; \ | |
2578 } \ | |
2565 CODING_ISO_DESIGNATION (coding, reg) = id; \ | 2579 CODING_ISO_DESIGNATION (coding, reg) = id; \ |
2566 /* If there was an invalid designation to REG previously, and this \ | 2580 /* If there was an invalid designation to REG previously, and this \ |
2567 designation is ASCII to REG, we should keep this designation \ | 2581 designation is ASCII to REG, we should keep this designation \ |
2568 sequence. */ \ | 2582 sequence. */ \ |
2569 if (prev == -2 && id == charset_ascii) \ | 2583 if (prev == -2 && id == charset_ascii) \ |
3199 sequences are also produced in advance if necessary. */ | 3213 sequences are also produced in advance if necessary. */ |
3200 | 3214 |
3201 #define ENCODE_ISO_CHARACTER_DIMENSION1(charset, c1) \ | 3215 #define ENCODE_ISO_CHARACTER_DIMENSION1(charset, c1) \ |
3202 do { \ | 3216 do { \ |
3203 int id = CHARSET_ID (charset); \ | 3217 int id = CHARSET_ID (charset); \ |
3218 \ | |
3219 if ((CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_USE_ROMAN) \ | |
3220 && id == charset_ascii) \ | |
3221 { \ | |
3222 id = charset_jisx0201_roman; \ | |
3223 charset = CHARSET_FROM_ID (id); \ | |
3224 } \ | |
3225 \ | |
3204 if (CODING_ISO_SINGLE_SHIFTING (coding)) \ | 3226 if (CODING_ISO_SINGLE_SHIFTING (coding)) \ |
3205 { \ | 3227 { \ |
3206 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \ | 3228 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \ |
3207 EMIT_ONE_ASCII_BYTE (c1 & 0x7F); \ | 3229 EMIT_ONE_ASCII_BYTE (c1 & 0x7F); \ |
3208 else \ | 3230 else \ |
3235 invocation codes are also produced in advance if necessary. */ | 3257 invocation codes are also produced in advance if necessary. */ |
3236 | 3258 |
3237 #define ENCODE_ISO_CHARACTER_DIMENSION2(charset, c1, c2) \ | 3259 #define ENCODE_ISO_CHARACTER_DIMENSION2(charset, c1, c2) \ |
3238 do { \ | 3260 do { \ |
3239 int id = CHARSET_ID (charset); \ | 3261 int id = CHARSET_ID (charset); \ |
3262 \ | |
3263 if ((CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_USE_OLDJIS) \ | |
3264 && id == charset_jisx0208) \ | |
3265 { \ | |
3266 id = charset_jisx0208_1978; \ | |
3267 charset = CHARSET_FROM_ID (id); \ | |
3268 } \ | |
3269 \ | |
3240 if (CODING_ISO_SINGLE_SHIFTING (coding)) \ | 3270 if (CODING_ISO_SINGLE_SHIFTING (coding)) \ |
3241 { \ | 3271 { \ |
3242 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \ | 3272 if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) \ |
3243 EMIT_TWO_ASCII_BYTES ((c1) & 0x7F, (c2) & 0x7F); \ | 3273 EMIT_TWO_ASCII_BYTES ((c1) & 0x7F, (c2) & 0x7F); \ |
3244 else \ | 3274 else \ |
3518 else if (ASCII_CHAR_P (c)) | 3548 else if (ASCII_CHAR_P (c)) |
3519 { | 3549 { |
3520 if (ascii_compatible) | 3550 if (ascii_compatible) |
3521 EMIT_ONE_ASCII_BYTE (c); | 3551 EMIT_ONE_ASCII_BYTE (c); |
3522 else | 3552 else |
3523 ENCODE_ISO_CHARACTER (CHARSET_FROM_ID (charset_ascii), c); | 3553 { |
3554 struct charset *charset = CHARSET_FROM_ID (charset_ascii); | |
3555 ENCODE_ISO_CHARACTER (charset, c); | |
3556 } | |
3524 } | 3557 } |
3525 else | 3558 else |
3526 { | 3559 { |
3527 struct charset *charset = char_charset (c, charset_list, NULL); | 3560 struct charset *charset = char_charset (c, charset_list, NULL); |
3528 | 3561 |