diff options
| author | Kenichi Handa | 1998-11-04 10:48:53 +0000 |
|---|---|---|
| committer | Kenichi Handa | 1998-11-04 10:48:53 +0000 |
| commit | 6ef23ebb489b0bb8b212a110e497e08afcaa50ec (patch) | |
| tree | 8c598bf13c168c33895e11c70c6fab155eaa3c59 | |
| parent | 2187547f972c3c8a4742a0cc9b8c678af656c599 (diff) | |
| download | emacs-6ef23ebb489b0bb8b212a110e497e08afcaa50ec.tar.gz emacs-6ef23ebb489b0bb8b212a110e497e08afcaa50ec.zip | |
(string_to_non_ascii_char): Change the check for the
varidity of multibyte form.
(update_charset_table): Check validity of BYTES. Don't set
bytes_by_char_head here.
(init_charset_once): Set bytes_by_char_head completely.
| -rw-r--r-- | src/charset.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/charset.c b/src/charset.c index f7a5cae63f6..1e373ff6304 100644 --- a/src/charset.c +++ b/src/charset.c | |||
| @@ -219,7 +219,7 @@ string_to_non_ascii_char (str, len, actual_len, exclude_tail_garbage) | |||
| 219 | str++; | 219 | str++; |
| 220 | if (c >= LEADING_CODE_PRIVATE_11) | 220 | if (c >= LEADING_CODE_PRIVATE_11) |
| 221 | charset = *str++; | 221 | charset = *str++; |
| 222 | if (char_bytes <= bytes && CHARSET_DEFINED_P (charset)) | 222 | if (CHARSET_DEFINED_P (charset) && char_bytes <= bytes) |
| 223 | { | 223 | { |
| 224 | c1 = *str++ & 0x7f; | 224 | c1 = *str++ & 0x7f; |
| 225 | if (CHARSET_DIMENSION (charset) == 2) | 225 | if (CHARSET_DIMENSION (charset) == 2) |
| @@ -447,6 +447,9 @@ update_charset_table (charset_id, dimension, chars, width, direction, | |||
| 447 | leading_code_ext = charset; | 447 | leading_code_ext = charset; |
| 448 | } | 448 | } |
| 449 | 449 | ||
| 450 | if (BYTES_BY_CHAR_HEAD (leading_code_base) != bytes) | ||
| 451 | error ("Invalid dimension for the charset-ID %d", charset); | ||
| 452 | |||
| 450 | CHARSET_TABLE_INFO (charset, CHARSET_ID_IDX) = charset_id; | 453 | CHARSET_TABLE_INFO (charset, CHARSET_ID_IDX) = charset_id; |
| 451 | CHARSET_TABLE_INFO (charset, CHARSET_BYTES_IDX) = make_number (bytes); | 454 | CHARSET_TABLE_INFO (charset, CHARSET_BYTES_IDX) = make_number (bytes); |
| 452 | CHARSET_TABLE_INFO (charset, CHARSET_DIMENSION_IDX) = dimension; | 455 | CHARSET_TABLE_INFO (charset, CHARSET_DIMENSION_IDX) = dimension; |
| @@ -496,8 +499,6 @@ update_charset_table (charset_id, dimension, chars, width, direction, | |||
| 496 | if (charset != CHARSET_ASCII | 499 | if (charset != CHARSET_ASCII |
| 497 | && charset < MIN_CHARSET_PRIVATE_DIMENSION1) | 500 | && charset < MIN_CHARSET_PRIVATE_DIMENSION1) |
| 498 | { | 501 | { |
| 499 | /* Update tables bytes_by_char_head and width_by_char_head. */ | ||
| 500 | bytes_by_char_head[leading_code_base] = bytes; | ||
| 501 | width_by_char_head[leading_code_base] = XINT (width); | 502 | width_by_char_head[leading_code_base] = XINT (width); |
| 502 | 503 | ||
| 503 | /* Update table emacs_code_class. */ | 504 | /* Update table emacs_code_class. */ |
| @@ -1808,15 +1809,23 @@ init_charset_once () | |||
| 1808 | bzero (cmpchar_hash_table, sizeof cmpchar_hash_table); | 1809 | bzero (cmpchar_hash_table, sizeof cmpchar_hash_table); |
| 1809 | cmpchar_table_size = n_cmpchars = 0; | 1810 | cmpchar_table_size = n_cmpchars = 0; |
| 1810 | 1811 | ||
| 1811 | for (i = 0; i < 256; i++) | 1812 | for (i = 0; i < 128; i++) |
| 1812 | BYTES_BY_CHAR_HEAD (i) = 1; | 1813 | BYTES_BY_CHAR_HEAD (i) = 1; |
| 1814 | for (i = MIN_CHARSET_OFFICIAL_DIMENSION1; | ||
| 1815 | i <= MAX_CHARSET_OFFICIAL_DIMENSION1; i++) | ||
| 1816 | BYTES_BY_CHAR_HEAD (i) = 2; | ||
| 1817 | for (i = MIN_CHARSET_OFFICIAL_DIMENSION2; | ||
| 1818 | i <= MAX_CHARSET_OFFICIAL_DIMENSION2; i++) | ||
| 1819 | BYTES_BY_CHAR_HEAD (i) = 3; | ||
| 1813 | BYTES_BY_CHAR_HEAD (LEADING_CODE_PRIVATE_11) = 3; | 1820 | BYTES_BY_CHAR_HEAD (LEADING_CODE_PRIVATE_11) = 3; |
| 1814 | BYTES_BY_CHAR_HEAD (LEADING_CODE_PRIVATE_12) = 3; | 1821 | BYTES_BY_CHAR_HEAD (LEADING_CODE_PRIVATE_12) = 3; |
| 1815 | BYTES_BY_CHAR_HEAD (LEADING_CODE_PRIVATE_21) = 4; | 1822 | BYTES_BY_CHAR_HEAD (LEADING_CODE_PRIVATE_21) = 4; |
| 1816 | BYTES_BY_CHAR_HEAD (LEADING_CODE_PRIVATE_22) = 4; | 1823 | BYTES_BY_CHAR_HEAD (LEADING_CODE_PRIVATE_22) = 4; |
| 1817 | /* The following doesn't reflect the actual bytes, but just to tell | 1824 | /* The followings don't reflect the actual bytes, but just to tell |
| 1818 | that it is a start of a multibyte character. */ | 1825 | that it is a start of a multibyte character. */ |
| 1819 | BYTES_BY_CHAR_HEAD (LEADING_CODE_COMPOSITION) = 2; | 1826 | BYTES_BY_CHAR_HEAD (LEADING_CODE_COMPOSITION) = 2; |
| 1827 | BYTES_BY_CHAR_HEAD (0x9E) = 2; | ||
| 1828 | BYTES_BY_CHAR_HEAD (0x9F) = 2; | ||
| 1820 | 1829 | ||
| 1821 | for (i = 0; i < 128; i++) | 1830 | for (i = 0; i < 128; i++) |
| 1822 | WIDTH_BY_CHAR_HEAD (i) = 1; | 1831 | WIDTH_BY_CHAR_HEAD (i) = 1; |