Mercurial > emacs
comparison src/coding.c @ 19365:d9374f5ebd3a
(CODING_FLAG_ISO_LATIN_EXTRA): New macro.
| author | Kenichi Handa <handa@m17n.org> |
|---|---|
| date | Sat, 16 Aug 1997 01:54:37 +0000 |
| parents | af3d00fde172 |
| children | 33c5695c6c7e |
comparison
equal
deleted
inserted
replaced
| 19364:7182edce9028 | 19365:d9374f5ebd3a |
|---|---|
| 277 Lisp_Object Vcoding_system_for_write; | 277 Lisp_Object Vcoding_system_for_write; |
| 278 /* Coding-system actually used in the latest I/O. */ | 278 /* Coding-system actually used in the latest I/O. */ |
| 279 Lisp_Object Vlast_coding_system_used; | 279 Lisp_Object Vlast_coding_system_used; |
| 280 | 280 |
| 281 /* A vector of length 256 which contains information about special | 281 /* A vector of length 256 which contains information about special |
| 282 Microsoft codes. */ | 282 Latin codes (espepcially for dealing with Microsoft code). */ |
| 283 Lisp_Object Vmicrosoft_code_table; | 283 Lisp_Object Vlatin_extra_code_table; |
| 284 | 284 |
| 285 /* Flag to inhibit code conversion of end-of-line format. */ | 285 /* Flag to inhibit code conversion of end-of-line format. */ |
| 286 int inhibit_eol_conversion; | 286 int inhibit_eol_conversion; |
| 287 | 287 |
| 288 /* Coding system to be used to encode text for terminal display. */ | 288 /* Coding system to be used to encode text for terminal display. */ |
| 619 | CODING_CATEGORY_MASK_ISO_7_ELSE | 619 | CODING_CATEGORY_MASK_ISO_7_ELSE |
| 620 | CODING_CATEGORY_MASK_ISO_8_ELSE | 620 | CODING_CATEGORY_MASK_ISO_8_ELSE |
| 621 ); | 621 ); |
| 622 int g1 = 0; /* 1 iff designating to G1. */ | 622 int g1 = 0; /* 1 iff designating to G1. */ |
| 623 int c, i; | 623 int c, i; |
| 624 | 624 struct coding_system coding_iso_8_1, coding_iso_8_2; |
| 625 while (src < src_end) | 625 |
| 626 /* Coding systems of these categories may accept latin extra codes. */ | |
| 627 setup_coding_system | |
| 628 (XSYMBOL (coding_category_table[CODING_CATEGORY_IDX_ISO_8_1])->value, | |
| 629 &coding_iso_8_1); | |
| 630 setup_coding_system | |
| 631 (XSYMBOL (coding_category_table[CODING_CATEGORY_IDX_ISO_8_2])->value, | |
| 632 &coding_iso_8_2); | |
| 633 | |
| 634 while (mask && src < src_end) | |
| 626 { | 635 { |
| 627 c = *src++; | 636 c = *src++; |
| 628 switch (c) | 637 switch (c) |
| 629 { | 638 { |
| 630 case ISO_CODE_ESC: | 639 case ISO_CODE_ESC: |
| 681 break; | 690 break; |
| 682 | 691 |
| 683 case ISO_CODE_CSI: | 692 case ISO_CODE_CSI: |
| 684 case ISO_CODE_SS2: | 693 case ISO_CODE_SS2: |
| 685 case ISO_CODE_SS3: | 694 case ISO_CODE_SS3: |
| 686 return CODING_CATEGORY_MASK_ISO_8_ELSE; | 695 { |
| 696 int newmask = CODING_CATEGORY_MASK_ISO_8_ELSE; | |
| 697 | |
| 698 if (VECTORP (Vlatin_extra_code_table) | |
| 699 && !NILP (XVECTOR (Vlatin_extra_code_table)->contents[c])) | |
| 700 { | |
| 701 if (coding_iso_8_1.flags & CODING_FLAG_ISO_LATIN_EXTRA) | |
| 702 newmask |= CODING_CATEGORY_MASK_ISO_8_1; | |
| 703 if (coding_iso_8_2.flags & CODING_FLAG_ISO_LATIN_EXTRA) | |
| 704 newmask |= CODING_CATEGORY_MASK_ISO_8_2; | |
| 705 } | |
| 706 mask &= newmask; | |
| 707 } | |
| 708 break; | |
| 687 | 709 |
| 688 default: | 710 default: |
| 689 if (c < 0x80) | 711 if (c < 0x80) |
| 690 break; | 712 break; |
| 691 else if (c < 0xA0) | 713 else if (c < 0xA0) |
| 692 { | 714 { |
| 693 if (VECTORP (Vmicrosoft_code_table) | 715 if (VECTORP (Vlatin_extra_code_table) |
| 694 && !NILP (XVECTOR (Vmicrosoft_code_table)->contents[c])) | 716 && !NILP (XVECTOR (Vlatin_extra_code_table)->contents[c])) |
| 695 { | 717 { |
| 696 mask &= ~(CODING_CATEGORY_MASK_ISO_7 | 718 int newmask = 0; |
| 697 | CODING_CATEGORY_MASK_ISO_7_ELSE); | 719 |
| 698 break; | 720 if (coding_iso_8_1.flags & CODING_FLAG_ISO_LATIN_EXTRA) |
| 721 newmask |= CODING_CATEGORY_MASK_ISO_8_1; | |
| 722 if (coding_iso_8_2.flags & CODING_FLAG_ISO_LATIN_EXTRA) | |
| 723 newmask |= CODING_CATEGORY_MASK_ISO_8_2; | |
| 724 mask &= newmask; | |
| 699 } | 725 } |
| 700 return 0; | 726 else |
| 727 return 0; | |
| 701 } | 728 } |
| 702 else | 729 else |
| 703 { | 730 { |
| 704 unsigned char *src_begin = src; | 731 unsigned char *src_begin = src; |
| 705 | 732 |
| 2368 | (NILP (flags[11]) ? 0 : CODING_FLAG_ISO_USE_OLDJIS) | 2395 | (NILP (flags[11]) ? 0 : CODING_FLAG_ISO_USE_OLDJIS) |
| 2369 | (NILP (flags[12]) ? 0 : CODING_FLAG_ISO_NO_DIRECTION) | 2396 | (NILP (flags[12]) ? 0 : CODING_FLAG_ISO_NO_DIRECTION) |
| 2370 | (NILP (flags[13]) ? 0 : CODING_FLAG_ISO_INIT_AT_BOL) | 2397 | (NILP (flags[13]) ? 0 : CODING_FLAG_ISO_INIT_AT_BOL) |
| 2371 | (NILP (flags[14]) ? 0 : CODING_FLAG_ISO_DESIGNATE_AT_BOL) | 2398 | (NILP (flags[14]) ? 0 : CODING_FLAG_ISO_DESIGNATE_AT_BOL) |
| 2372 | (NILP (flags[15]) ? 0 : CODING_FLAG_ISO_SAFE) | 2399 | (NILP (flags[15]) ? 0 : CODING_FLAG_ISO_SAFE) |
| 2400 | (NILP (flags[16]) ? 0 : CODING_FLAG_ISO_LATIN_EXTRA) | |
| 2373 ); | 2401 ); |
| 2374 | 2402 |
| 2375 /* Invoke graphic register 0 to plane 0. */ | 2403 /* Invoke graphic register 0 to plane 0. */ |
| 2376 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0; | 2404 CODING_SPEC_ISO_INVOCATION (coding, 0) = 0; |
| 2377 /* Invoke graphic register 1 to plane 1 if we can use full 8-bit. */ | 2405 /* Invoke graphic register 1 to plane 1 if we can use full 8-bit. */ |
| 2654 /* No valid ISO2022 code follows C. Try again. */ | 2682 /* No valid ISO2022 code follows C. Try again. */ |
| 2655 goto label_loop_detect_coding; | 2683 goto label_loop_detect_coding; |
| 2656 } | 2684 } |
| 2657 else if (c < 0xA0) | 2685 else if (c < 0xA0) |
| 2658 { | 2686 { |
| 2659 /* If C is a special Microsoft code, | 2687 /* If C is a special latin extra code, |
| 2660 or is an ISO2022 specific control code of C1 (SS2 or SS3), | 2688 or is an ISO2022 specific control code of C1 (SS2 or SS3), |
| 2661 or is an ISO2022 control-sequence-introducer (CSI), | 2689 or is an ISO2022 control-sequence-introducer (CSI), |
| 2662 we should also consider the possibility of someof ISO2022 codings. */ | 2690 we should also consider the possibility of someof ISO2022 codings. */ |
| 2663 if ((VECTORP (Vmicrosoft_code_table) | 2691 if ((VECTORP (Vlatin_extra_code_table) |
| 2664 && !NILP (XVECTOR (Vmicrosoft_code_table)->contents[c])) | 2692 && !NILP (XVECTOR (Vlatin_extra_code_table)->contents[c])) |
| 2665 || (c == ISO_CODE_SS2 || c == ISO_CODE_SS3) | 2693 || (c == ISO_CODE_SS2 || c == ISO_CODE_SS3) |
| 2666 || (c == ISO_CODE_CSI | 2694 || (c == ISO_CODE_CSI |
| 2667 && (src < src_end | 2695 && (src < src_end |
| 2668 && (*src == ']' | 2696 && (*src == ']' |
| 2669 || (src + 1 < src_end | 2697 || (src + 1 < src_end |
| 4015 "Cons of coding systems used for process I/O by default.\n\ | 4043 "Cons of coding systems used for process I/O by default.\n\ |
| 4016 The car part is used for decoding a process output,\n\ | 4044 The car part is used for decoding a process output,\n\ |
| 4017 the cdr part is used for encoding a text to be sent to a process."); | 4045 the cdr part is used for encoding a text to be sent to a process."); |
| 4018 Vdefault_process_coding_system = Qnil; | 4046 Vdefault_process_coding_system = Qnil; |
| 4019 | 4047 |
| 4020 DEFVAR_LISP ("special-microsoft-code-table", &Vmicrosoft_code_table, | 4048 DEFVAR_LISP ("latin-extra-code-table", &Vlatin_extra_code_table, |
| 4021 "Table of special Microsoft codes in the range 128..159 (inclusive).\n\ | 4049 "Table of extra Latin codes in the range 128..159 (inclusive).\n\ |
| 4022 This is a vector of length 256.\n\ | 4050 This is a vector of length 256.\n\ |
| 4023 If Nth element is non-nil, the existence of code N in a file\n\ | 4051 If Nth element is non-nil, the existence of code N in a file\n\ |
| 4024 (or output of subprocess) doesn't prevent it to be detected as\n\ | 4052 (or output of subprocess) doesn't prevent it to be detected as\n\ |
| 4025 a coding system of ISO 2022 variant (e.g. iso-latin-1) on reading a file\n\ | 4053 a coding system of ISO 2022 variant which has a flag\n\ |
| 4054 `accept-latin-extra-code' t (e.g. iso-latin-1) on reading a file\n\ | |
| 4026 or reading output of a subprocess.\n\ | 4055 or reading output of a subprocess.\n\ |
| 4027 Only 128th through 159th elements has a meaning."); | 4056 Only 128th through 159th elements has a meaning."); |
| 4028 Vmicrosoft_code_table = Fmake_vector (make_number (256), Qnil); | 4057 Vlatin_extra_code_table = Fmake_vector (make_number (256), Qnil); |
| 4029 } | 4058 } |
| 4030 | 4059 |
| 4031 #endif /* emacs */ | 4060 #endif /* emacs */ |
