Mercurial > emacs
changeset 88744:5b9a72e491d4
(enum define_charset_arg_index): Delete
charset_arg_parents and add charset_arg_subset and
charset_arg_superset,.
(enum charset_attr_index): Delete charset_parents and add
charset_subset and charset_superset.
(enum charset_method): Delete CHARSET_METHOD_INHERIT and add
CHARSET_METHOD_SUBSET and CHARSET_METHOD_SUPERSET.
(CHARSET_ATTR_PARENTS, CHARSET_PARENTS): Macros deleted.
(CHARSET_ATTR_SUBSET, CHARSET_ATTR_SUPERSET, CHARSET_SUBSET,
CHARSET_SUPERSET): New macros.
(charset_work): Extern it.
(ENCODE_CHAR): Use charset_work.
(CHAR_CHARSET_P): Adjusted for the change of encoder format.
(map_charset_chars): Extern it.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Wed, 12 Jun 2002 00:13:36 +0000 |
parents | 4570f1a4c391 |
children | f247f70ed2c3 |
files | src/charset.h |
diffstat | 1 files changed, 68 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/src/charset.h Wed Jun 12 00:13:15 2002 +0000 +++ b/src/charset.h Wed Jun 12 00:13:36 2002 +0000 @@ -43,7 +43,8 @@ charset_arg_invalid_code, charset_arg_code_offset, charset_arg_map, - charset_arg_parents, + charset_arg_subset, + charset_arg_superset, charset_arg_unify_map, charset_arg_plist, charset_arg_max @@ -80,9 +81,27 @@ points. */ charset_encoder, - /* If the method of the charset is `INHERIT', the value is a list - of the form (PARENT-CHARSET-ID . CODE-OFFSET). */ - charset_parents, + /* If the method of the charset is `SUBSET', the value is a vector + that has this form: + + [ CHARSET-ID MIN-CODE MAX-CODE OFFSET ] + + CHARSET-ID is an ID number of a parent charset. MIN-CODE and + MAX-CODE specify the range of characters inherited from the + parent. OFFSET is an integer value to add to a code point of + the parent charset to get the corresponding code point of this + charset. */ + charset_subset, + + /* If the method of the charset is `SUPERSET', the value is a list + whose elements have this form: + + (CHARSET-ID . OFFSET) + + CHARSET-IDs are ID numbers of parent charsets. OFFSET is an + integer value to add to a code point of the parent charset to + get the corresponding code point of this charset. */ + charset_superset, /* The value is a mapping vector or a file name that contains mapping vector. This provide how characters in the charset @@ -118,9 +137,11 @@ CHARSET_METHOD_MAP. */ CHARSET_METHOD_MAP_DEFERRED, - /* A charset of this method inherits characters from the other - charsets. */ - CHARSET_METHOD_INHERIT + /* A charset of this method is a subset of the other charset. */ + CHARSET_METHOD_SUBSET, + + /* A charset of this method is a superset of the other charsets. */ + CHARSET_METHOD_SUPERSET }; struct charset @@ -245,7 +266,8 @@ #define CHARSET_ATTR_MAP(attrs) AREF ((attrs), charset_map) #define CHARSET_ATTR_DECODER(attrs) AREF ((attrs), charset_decoder) #define CHARSET_ATTR_ENCODER(attrs) AREF ((attrs), charset_encoder) -#define CHARSET_ATTR_PARENTS(attrs) AREF ((attrs), charset_parents) +#define CHARSET_ATTR_SUBSET(attrs) AREF ((attrs), charset_subset) +#define CHARSET_ATTR_SUPERSET(attrs) AREF ((attrs), charset_superset) #define CHARSET_ATTR_UNIFY_MAP(attrs) AREF ((attrs), charset_unify_map) #define CHARSET_ATTR_DEUNIFIER(attrs) AREF ((attrs), charset_deunifier) @@ -290,8 +312,10 @@ (CHARSET_ATTR_DECODER (CHARSET_ATTRIBUTES (charset))) #define CHARSET_ENCODER(charset) \ (CHARSET_ATTR_ENCODER (CHARSET_ATTRIBUTES (charset))) -#define CHARSET_PARENTS(charset) \ - (CHARSET_ATTR_PARENTS (CHARSET_ATTRIBUTES (charset))) +#define CHARSET_SUBSET(charset) \ + (CHARSET_ATTR_SUBSET (CHARSET_ATTRIBUTES (charset))) +#define CHARSET_SUPERSET(charset) \ + (CHARSET_ATTR_SUPERSET (CHARSET_ATTRIBUTES (charset))) #define CHARSET_UNIFY_MAP(charset) \ (CHARSET_ATTR_UNIFY_MAP (CHARSET_ATTRIBUTES (charset))) #define CHARSET_DEUNIFIER(charset) \ @@ -382,24 +406,29 @@ : decode_char ((charset), (code))) +extern Lisp_Object charset_work; + /* Return a code point of CHAR in CHARSET. Try some optimization before calling encode_char. */ -#define ENCODE_CHAR(charset, c) \ - ((ASCII_CHAR_P (c) && (charset)->ascii_compatible_p) \ - ? (c) \ - : (charset)->unified_p \ - ? encode_char ((charset), (c)) \ - : ((c) < (charset)->min_char || (c) > (charset)->max_char) \ - ? (charset)->invalid_code \ - : (charset)->method == CHARSET_METHOD_OFFSET \ - ? ((charset)->code_linear_p \ - ? (c) - (charset)->code_offset + (charset)->min_code \ - : encode_char ((charset), (c))) \ - : (charset)->method == CHARSET_METHOD_MAP \ - ? ((charset)->compact_codes_p \ - ? XFASTINT (CHAR_TABLE_REF (CHARSET_ENCODER (charset), (c))) \ - : encode_char ((charset), (c))) \ +#define ENCODE_CHAR(charset, c) \ + ((ASCII_CHAR_P (c) && (charset)->ascii_compatible_p) \ + ? (c) \ + : (charset)->unified_p \ + ? encode_char ((charset), (c)) \ + : ((c) < (charset)->min_char || (c) > (charset)->max_char) \ + ? (charset)->invalid_code \ + : (charset)->method == CHARSET_METHOD_OFFSET \ + ? ((charset)->code_linear_p \ + ? (c) - (charset)->code_offset + (charset)->min_code \ + : encode_char ((charset), (c))) \ + : (charset)->method == CHARSET_METHOD_MAP \ + ? ((charset)->compact_codes_p \ + ? (charset_work = CHAR_TABLE_REF (CHARSET_ENCODER (charset), (c)), \ + (NILP (charset_work) \ + ? (charset)->invalid_code \ + : XFASTINT (charset_work))) \ + : encode_char ((charset), (c))) \ : encode_char ((charset), (c))) @@ -445,17 +474,16 @@ /* 1 iff CHARSET may contain the character C. */ -#define CHAR_CHARSET_P(c, charset) \ - ((ASCII_CHAR_P (c) && (charset)->ascii_compatible_p) \ - || (CHARSET_UNIFIED_P (charset) \ - ? encode_char ((charset), (c)) != (charset)->invalid_code \ - : (CHARSET_FAST_MAP_REF ((c), (charset)->fast_map) \ - && ((charset)->method == CHARSET_METHOD_OFFSET \ - ? (c) >= (charset)->min_char && (c) <= (charset)->max_char \ - : ((charset)->method == CHARSET_METHOD_MAP \ - && (charset)->compact_codes_p) \ - ? (XFASTINT (CHAR_TABLE_REF (CHARSET_ENCODER (charset), (c))) \ - != (charset)->invalid_code) \ +#define CHAR_CHARSET_P(c, charset) \ + ((ASCII_CHAR_P (c) && (charset)->ascii_compatible_p) \ + || (CHARSET_UNIFIED_P (charset) \ + ? encode_char ((charset), (c)) != (charset)->invalid_code \ + : (CHARSET_FAST_MAP_REF ((c), (charset)->fast_map) \ + && ((charset)->method == CHARSET_METHOD_OFFSET \ + ? (c) >= (charset)->min_char && (c) <= (charset)->max_char \ + : ((charset)->method == CHARSET_METHOD_MAP \ + && (charset)->compact_codes_p) \ + ? ! NILP (CHAR_TABLE_REF (CHARSET_ENCODER (charset), (c))) \ : encode_char ((charset), (c)) != (charset)->invalid_code)))) @@ -476,6 +504,10 @@ extern unsigned encode_char P_ ((struct charset *, int)); extern int string_xstring_p P_ ((Lisp_Object)); +extern void map_charset_chars P_ ((void (*) (Lisp_Object, Lisp_Object), + Lisp_Object, Lisp_Object, + struct charset *, unsigned, unsigned)); + EXFUN (Funify_charset, 2); #endif /* EMACS_CHARSET_H */