aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/charset.c19
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;