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