diff options
| author | Kenichi Handa | 1997-02-27 10:45:19 +0000 |
|---|---|---|
| committer | Kenichi Handa | 1997-02-27 10:45:19 +0000 |
| commit | 8fb379fdac206bcb716c3faa25f7de924806f30d (patch) | |
| tree | 4ab7ef23581cc423e99c6205f65641aadaa7eb86 /src/data.c | |
| parent | 3046d6fcf7e4e64ed1528eb839edf04aae72b260 (diff) | |
| download | emacs-8fb379fdac206bcb716c3faa25f7de924806f30d.tar.gz emacs-8fb379fdac206bcb716c3faa25f7de924806f30d.zip | |
(Faref, Faset): Handle a composite char correctly in char-table.
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/data.c b/src/data.c index f5d81d82b3a..4db329233f1 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -1567,8 +1567,8 @@ or a byte-code object. IDX starts at 0.") | |||
| 1567 | } | 1567 | } |
| 1568 | else | 1568 | else |
| 1569 | { | 1569 | { |
| 1570 | int idx[4]; /* For charset, code1, code2, and anchor. */ | 1570 | int idx[3]; /* For charset, code1, and code2. */ |
| 1571 | int i; | 1571 | int i, len; |
| 1572 | Lisp_Object sub_array; | 1572 | Lisp_Object sub_array; |
| 1573 | 1573 | ||
| 1574 | /* There's no reason to treat a composite character | 1574 | /* There's no reason to treat a composite character |
| @@ -1580,11 +1580,11 @@ or a byte-code object. IDX starts at 0.") | |||
| 1580 | idxval = cmpchar_component (idxval, 0); | 1580 | idxval = cmpchar_component (idxval, 0); |
| 1581 | #endif | 1581 | #endif |
| 1582 | SPLIT_NON_ASCII_CHAR (idxval, idx[0], idx[1], idx[2]); | 1582 | SPLIT_NON_ASCII_CHAR (idxval, idx[0], idx[1], idx[2]); |
| 1583 | idx[3] = 0; | 1583 | len = (COMPOSITE_CHAR_P (idxval) || idx[2]) ? 3 : (idx[1] ? 2 : 1); |
| 1584 | 1584 | ||
| 1585 | try_parent_char_table: | 1585 | try_parent_char_table: |
| 1586 | sub_array = array; | 1586 | sub_array = array; |
| 1587 | for (i = 0; idx[i]; i++) | 1587 | for (i = 0; i < len; i++) |
| 1588 | { | 1588 | { |
| 1589 | val = XCHAR_TABLE (sub_array)->contents[idx[i]]; | 1589 | val = XCHAR_TABLE (sub_array)->contents[idx[i]]; |
| 1590 | if (NILP (val)) | 1590 | if (NILP (val)) |
| @@ -1677,14 +1677,14 @@ ARRAY may be a vector or a string. IDX starts at 0.") | |||
| 1677 | XCHAR_TABLE (array)->contents[idxval] = newelt; | 1677 | XCHAR_TABLE (array)->contents[idxval] = newelt; |
| 1678 | else | 1678 | else |
| 1679 | { | 1679 | { |
| 1680 | int idx[4]; /* For charset, code1, code2, and anchor. */ | 1680 | int idx[3]; /* For charset, code1, and code2. */ |
| 1681 | int i; | 1681 | int i, len; |
| 1682 | Lisp_Object val; | 1682 | Lisp_Object val; |
| 1683 | 1683 | ||
| 1684 | SPLIT_NON_ASCII_CHAR (idxval, idx[0], idx[1], idx[2]); | 1684 | SPLIT_NON_ASCII_CHAR (idxval, idx[0], idx[1], idx[2]); |
| 1685 | idx[3] = 0; | 1685 | len = (COMPOSITE_CHAR_P (idxval) || idx[2]) ? 2 : (idx[1] ? 1 : 0); |
| 1686 | 1686 | ||
| 1687 | for (i = 0; idx[i + 1]; i++) | 1687 | for (i = 0; i < len; i++) |
| 1688 | { | 1688 | { |
| 1689 | val = XCHAR_TABLE (array)->contents[idx[i]]; | 1689 | val = XCHAR_TABLE (array)->contents[idx[i]]; |
| 1690 | if (CHAR_TABLE_P (val)) | 1690 | if (CHAR_TABLE_P (val)) |