Mercurial > emacs
comparison src/coding.c @ 101174:198d8bf06a4f
Fix previous changes.
| author | Kenichi Handa <handa@m17n.org> |
|---|---|
| date | Wed, 14 Jan 2009 12:51:06 +0000 |
| parents | 674e67257137 |
| children | ee5f395f3c19 |
comparison
equal
deleted
inserted
replaced
| 101173:825f62fa0199 | 101174:198d8bf06a4f |
|---|---|
| 742 } \ | 742 } \ |
| 743 consumed_chars++; \ | 743 consumed_chars++; \ |
| 744 } while (0) | 744 } while (0) |
| 745 | 745 |
| 746 /* Safely get two bytes from the source text pointed by SRC which ends | 746 /* Safely get two bytes from the source text pointed by SRC which ends |
| 747 at SRC_END, and set C1 and C2 to those bytes. If there are not | 747 at SRC_END, and set C1 and C2 to those bytes while skipping the |
| 748 enough bytes in the source for C1, it jumps to `no_more_source'. | 748 heading multibyte characters. If there are not enough bytes in the |
| 749 If there are not enough bytes in the source for C2, set C2 to -1. | 749 source, it jumps to `no_more_source'. If multibytep is nonzero and |
| 750 If multibytep is nonzero and a multibyte character is found at SRC, | 750 a multibyte character is found for C2, set C2 to the negative value |
| 751 set C1 and/or C2 to the negative value of the character code. The | 751 of the character code. The caller should declare and set these |
| 752 caller should declare and set these variables appropriately in | 752 variables appropriately in advance: |
| 753 advance: | |
| 754 src, src_end, multibytep | 753 src, src_end, multibytep |
| 755 It is intended that this macro is used in detect_coding_utf_16. */ | 754 It is intended that this macro is used in detect_coding_utf_16. */ |
| 756 | 755 |
| 757 #define TWO_MORE_BYTES(c1, c2) \ | 756 #define TWO_MORE_BYTES(c1, c2) \ |
| 758 do { \ | 757 do { \ |
| 759 if (src == src_end) \ | 758 do { \ |
| 760 goto no_more_source; \ | 759 if (src == src_end) \ |
| 761 c1 = *src++; \ | 760 goto no_more_source; \ |
| 762 if (multibytep && (c1 & 0x80)) \ | 761 c1 = *src++; \ |
| 763 { \ | 762 if (multibytep && (c1 & 0x80)) \ |
| 764 if ((c1 & 0xFE) == 0xC0) \ | 763 { \ |
| 765 c1 = ((c1 & 1) << 6) | *src++; \ | 764 if ((c1 & 0xFE) == 0xC0) \ |
| 766 else \ | 765 c1 = ((c1 & 1) << 6) | *src++; \ |
| 767 { \ | 766 else \ |
| 768 c1 = c2 = -1; \ | 767 { \ |
| 769 break; \ | 768 src += BYTES_BY_CHAR_HEAD (c1) - 1; \ |
| 770 } \ | 769 c1 = -1; \ |
| 771 } \ | 770 } \ |
| 772 if (src == src_end) \ | 771 } \ |
| 773 c2 = -1; \ | 772 } while (c1 < 0); \ |
| 774 else \ | 773 if (src == src_end) \ |
| 775 { \ | 774 goto no_more_source; \ |
| 776 c2 = *src++; \ | 775 c2 = *src++; \ |
| 777 if (multibytep && (c2 & 0x80)) \ | 776 if (multibytep && (c2 & 0x80)) \ |
| 778 { \ | 777 { \ |
| 779 if ((c2 & 0xFE) == 0xC0) \ | 778 if ((c2 & 0xFE) == 0xC0) \ |
| 780 c2 = ((c2 & 1) << 6) | *src++; \ | 779 c2 = ((c2 & 1) << 6) | *src++; \ |
| 781 else \ | 780 else \ |
| 782 c2 = -1; \ | 781 c2 = -1; \ |
| 783 } \ | 782 } \ |
| 784 } \ | |
| 785 } while (0) | 783 } while (0) |
| 786 | 784 |
| 787 | 785 |
| 788 #define ONE_MORE_BYTE_NO_CHECK(c) \ | 786 #define ONE_MORE_BYTE_NO_CHECK(c) \ |
| 789 do { \ | 787 do { \ |
| 1631 | CATEGORY_MASK_UTF_16_AUTO); | 1629 | CATEGORY_MASK_UTF_16_AUTO); |
| 1632 detect_info->rejected |= (CATEGORY_MASK_UTF_16_LE | 1630 detect_info->rejected |= (CATEGORY_MASK_UTF_16_LE |
| 1633 | CATEGORY_MASK_UTF_16_BE_NOSIG | 1631 | CATEGORY_MASK_UTF_16_BE_NOSIG |
| 1634 | CATEGORY_MASK_UTF_16_LE_NOSIG); | 1632 | CATEGORY_MASK_UTF_16_LE_NOSIG); |
| 1635 } | 1633 } |
| 1636 else if (c1 < 0 || c2 < 0) | 1634 else if (c2 < 0) |
| 1637 { | 1635 { |
| 1638 detect_info->rejected |= CATEGORY_MASK_UTF_16; | 1636 detect_info->rejected |= CATEGORY_MASK_UTF_16; |
| 1639 return 0; | 1637 return 0; |
| 1640 } | 1638 } |
| 1641 else | 1639 else |
| 1654 |= (CATEGORY_MASK_UTF_16_BE | CATEGORY_MASK_UTF_16_LE); | 1652 |= (CATEGORY_MASK_UTF_16_BE | CATEGORY_MASK_UTF_16_LE); |
| 1655 | 1653 |
| 1656 while (1) | 1654 while (1) |
| 1657 { | 1655 { |
| 1658 TWO_MORE_BYTES (c1, c2); | 1656 TWO_MORE_BYTES (c1, c2); |
| 1659 if (c1 < 0 || c2 < 0) | 1657 if (c2 < 0) |
| 1660 break; | 1658 break; |
| 1661 if (! e[c1]) | 1659 if (! e[c1]) |
| 1662 { | 1660 { |
| 1663 e[c1] = 1; | 1661 e[c1] = 1; |
| 1664 e_num++; | 1662 e_num++; |
