Mercurial > emacs
comparison src/buffer.c @ 21065:fde58556c616
(Fset_buffer_multibyte): Fix arg for chars_in_text.
Be sure not to have a multibyte sequence striding over the GAP
| author | Kenichi Handa <handa@m17n.org> |
|---|---|
| date | Wed, 04 Mar 1998 07:41:41 +0000 |
| parents | abc60038dd2b |
| children | 6b0336de5fbe |
comparison
equal
deleted
inserted
replaced
| 21064:90bdbe2754c8 | 21065:fde58556c616 |
|---|---|
| 1735 tail = XMARKER (tail)->chain; | 1735 tail = XMARKER (tail)->chain; |
| 1736 } | 1736 } |
| 1737 } | 1737 } |
| 1738 else | 1738 else |
| 1739 { | 1739 { |
| 1740 /* Be sure not to have a multibyte sequence striding over the GAP. | |
| 1741 Ex: We change this: "...abc\201\241\241 _GAP_ \241\241\241..." | |
| 1742 to: "...abc _GAP_ \201\241\241\241\241\241..." */ | |
| 1743 | |
| 1744 if (GPT_BYTE > 1 && GPT_BYTE < Z_BYTE | |
| 1745 && ! CHAR_HEAD_P (*(GAP_END_ADDR))) | |
| 1746 { | |
| 1747 unsigned char *p = GPT_ADDR - 1; | |
| 1748 | |
| 1749 while (! CHAR_HEAD_P (*p) && p > BEG_ADDR) p--; | |
| 1750 if (BASE_LEADING_CODE_P (*p)) | |
| 1751 { | |
| 1752 int new_gpt = GPT_BYTE - (GPT_ADDR - p); | |
| 1753 | |
| 1754 move_gap_both (new_gpt, new_gpt); | |
| 1755 } | |
| 1756 } | |
| 1757 | |
| 1740 /* Do this first, so that chars_in_text asks the right question. | 1758 /* Do this first, so that chars_in_text asks the right question. |
| 1741 set_intervals_multibyte needs it too. */ | 1759 set_intervals_multibyte needs it too. */ |
| 1742 current_buffer->enable_multibyte_characters = Qt; | 1760 current_buffer->enable_multibyte_characters = Qt; |
| 1743 | 1761 |
| 1744 GPT_BYTE = advance_to_char_boundary (GPT_BYTE); | 1762 GPT_BYTE = advance_to_char_boundary (GPT_BYTE); |
| 1745 GPT = chars_in_text (BEG_ADDR, GPT_BYTE - BEG_BYTE) + BEG; | 1763 GPT = chars_in_text (BEG_ADDR, GPT_BYTE - BEG_BYTE) + BEG; |
| 1746 | 1764 |
| 1747 Z = chars_in_text (GPT_ADDR, Z_BYTE - GPT_BYTE) + GPT; | 1765 Z = chars_in_text (GAP_END_ADDR, Z_BYTE - GPT_BYTE) + GPT; |
| 1748 | 1766 |
| 1749 BEGV_BYTE = advance_to_char_boundary (BEGV_BYTE); | 1767 BEGV_BYTE = advance_to_char_boundary (BEGV_BYTE); |
| 1750 if (BEGV_BYTE > GPT_BYTE) | 1768 if (BEGV_BYTE > GPT_BYTE) |
| 1751 BEGV = chars_in_text (GPT_ADDR, BEGV_BYTE - GPT_BYTE) + GPT; | 1769 BEGV = chars_in_text (GAP_END_ADDR, BEGV_BYTE - GPT_BYTE) + GPT; |
| 1752 else | 1770 else |
| 1753 BEGV = chars_in_text (BEG_ADDR, BEGV_BYTE - BEG_BYTE) + BEG; | 1771 BEGV = chars_in_text (BEG_ADDR, BEGV_BYTE - BEG_BYTE) + BEG; |
| 1754 | 1772 |
| 1755 ZV_BYTE = advance_to_char_boundary (ZV_BYTE); | 1773 ZV_BYTE = advance_to_char_boundary (ZV_BYTE); |
| 1756 if (ZV_BYTE > GPT_BYTE) | 1774 if (ZV_BYTE > GPT_BYTE) |
| 1757 ZV = chars_in_text (GPT_ADDR, ZV_BYTE - GPT_BYTE) + GPT; | 1775 ZV = chars_in_text (GAP_END_ADDR, ZV_BYTE - GPT_BYTE) + GPT; |
| 1758 else | 1776 else |
| 1759 ZV = chars_in_text (BEG_ADDR, ZV_BYTE - BEG_BYTE) + BEG; | 1777 ZV = chars_in_text (BEG_ADDR, ZV_BYTE - BEG_BYTE) + BEG; |
| 1760 | 1778 |
| 1761 { | 1779 { |
| 1762 int pt_byte = advance_to_char_boundary (PT_BYTE); | 1780 int pt_byte = advance_to_char_boundary (PT_BYTE); |
| 1763 int pt; | 1781 int pt; |
| 1764 | 1782 |
| 1765 if (pt_byte > GPT_BYTE) | 1783 if (pt_byte > GPT_BYTE) |
| 1766 pt = chars_in_text (GPT_ADDR, pt_byte - GPT_BYTE) + GPT; | 1784 pt = chars_in_text (GAP_END_ADDR, pt_byte - GPT_BYTE) + GPT; |
| 1767 else | 1785 else |
| 1768 pt = chars_in_text (BEG_ADDR, pt_byte - BEG_BYTE) + BEG; | 1786 pt = chars_in_text (BEG_ADDR, pt_byte - BEG_BYTE) + BEG; |
| 1769 TEMP_SET_PT_BOTH (pt, pt_byte); | 1787 TEMP_SET_PT_BOTH (pt, pt_byte); |
| 1770 } | 1788 } |
| 1771 | 1789 |
