X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fchar-ucs.h;h=d8768c679332024efd77fdf2de58693db5155612;hb=ab1dd06e0177737fcb5880921865f2c541dfca5f;hp=d62a36c55e7f69cbbefe509ef3107b1faaf8e0b2;hpb=0a1184e5a0dbfd4f5e8f4e41e4fa40084b07519f;p=chise%2Fxemacs-chise.git- diff --git a/src/char-ucs.h b/src/char-ucs.h index d62a36c..d8768c6 100644 --- a/src/char-ucs.h +++ b/src/char-ucs.h @@ -21,83 +21,14 @@ Boston, MA 02111-1307, USA. */ #ifndef INCLUDED_char_ucs_h_ #define INCLUDED_char_ucs_h_ -#define valid_char_p(ch) 1 - -#define CHAR_ASCII_P(ch) ((ch) <= 0x7F) - - -struct Lisp_Uint8_Byte_Table -{ - struct lcrecord_header header; - - unsigned char property[256]; -}; -typedef struct Lisp_Uint8_Byte_Table Lisp_Uint8_Byte_Table; - -DECLARE_LRECORD (uint8_byte_table, Lisp_Uint8_Byte_Table); -#define XUINT8_BYTE_TABLE(x) \ - XRECORD (x, uint8_byte_table, Lisp_Uint8_Byte_Table) -#define XSETUINT8_BYTE_TABLE(x, p) XSETRECORD (x, p, uint8_byte_table) -#define UINT8_BYTE_TABLE_P(x) RECORDP (x, uint8_byte_table) -#define GC_UINT8_BYTE_TABLE_P(x) GC_RECORDP (x, uint8_byte_table) -/* #define CHECK_UINT8_BYTE_TABLE(x) CHECK_RECORD (x, uint8_byte_table) - char table entries should never escape to Lisp */ - - -struct Lisp_Uint16_Byte_Table -{ - struct lcrecord_header header; - - unsigned short property[256]; -}; -typedef struct Lisp_Uint16_Byte_Table Lisp_Uint16_Byte_Table; - -DECLARE_LRECORD (uint16_byte_table, Lisp_Uint16_Byte_Table); -#define XUINT16_BYTE_TABLE(x) \ - XRECORD (x, uint16_byte_table, Lisp_Uint16_Byte_Table) -#define XSETUINT16_BYTE_TABLE(x, p) XSETRECORD (x, p, uint16_byte_table) -#define UINT16_BYTE_TABLE_P(x) RECORDP (x, uint16_byte_table) -#define GC_UINT16_BYTE_TABLE_P(x) GC_RECORDP (x, uint16_byte_table) -/* #define CHECK_UINT16_BYTE_TABLE(x) CHECK_RECORD (x, uint16_byte_table) - char table entries should never escape to Lisp */ - - -struct Lisp_Byte_Table -{ - struct lcrecord_header header; - - Lisp_Object property[256]; -}; -typedef struct Lisp_Byte_Table Lisp_Byte_Table; - -DECLARE_LRECORD (byte_table, Lisp_Byte_Table); -#define XBYTE_TABLE(x) XRECORD (x, byte_table, Lisp_Byte_Table) -#define XSETBYTE_TABLE(x, p) XSETRECORD (x, p, byte_table) -#define BYTE_TABLE_P(x) RECORDP (x, byte_table) -#define GC_BYTE_TABLE_P(x) GC_RECORDP (x, byte_table) -/* #define CHECK_BYTE_TABLE(x) CHECK_RECORD (x, byte_table) - char table entries should never escape to Lisp */ - - -struct Lisp_Char_ID_Table -{ - struct lcrecord_header header; - - Lisp_Object table; -}; -typedef struct Lisp_Char_ID_Table Lisp_Char_ID_Table; +#include "chartab.h" +#include "elhash.h" -DECLARE_LRECORD (char_id_table, Lisp_Char_ID_Table); -#define XCHAR_ID_TABLE(x) XRECORD (x, char_id_table, Lisp_Char_ID_Table) -#define XSETCHAR_ID_TABLE(x, p) XSETRECORD (x, p, char_id_table) -#define CHAR_ID_TABLE_P(x) RECORDP (x, char_id_table) -#define GC_CHAR_ID_TABLE_P(x) GC_RECORDP (x, char_id_table) -/* #define CHECK_CHAR_ID_TABLE(x) CHECK_RECORD (x, char_id_table) - char table entries should never escape to Lisp */ +extern Lisp_Object Vchar_attribute_hash_table; +#define valid_char_p(ch) 1 -Lisp_Object get_char_id_table (Emchar ch, Lisp_Object table); - +#define CHAR_ASCII_P(ch) ((ch) <= 0x7F) extern Lisp_Object Vcharset_mojikyo; extern Lisp_Object Vcharset_mojikyo_2022_1; @@ -110,7 +41,7 @@ extern Lisp_Object Vcharset_latin_jisx0201; typedef short Charset_ID; -#define MIN_LEADING_BYTE -0x70 +#define MIN_LEADING_BYTE -0x200 #define CHARSET_ID_OFFSET 0x00 /* ISO/IEC 10646 */ @@ -125,6 +56,15 @@ typedef short Charset_ID; /* ISO/IEC 10646 for CNS */ #define LEADING_BYTE_UCS_CNS (CHARSET_ID_OFFSET - 5) +/* ISO/IEC 10646 for JIS */ +#define LEADING_BYTE_UCS_JIS (CHARSET_ID_OFFSET - 6) + +/* ISO/IEC 10646 for KS */ +#define LEADING_BYTE_UCS_KS (CHARSET_ID_OFFSET - 7) + +/* ISO/IEC 10646 for Big5 */ +#define LEADING_BYTE_UCS_BIG5 (CHARSET_ID_OFFSET - 9) + /* Japanese JIS X0208-1990 2/4 2/{(8),9,10,11} 4/2 (B) */ #define LEADING_BYTE_JAPANESE_JISX0208_1990 (CHARSET_ID_OFFSET - 10) @@ -140,20 +80,20 @@ typedef short Charset_ID; #define LEADING_BYTE_CHINESE_BIG5_2 (CHARSET_ID_OFFSET - 22) /* VISCII 1.1 */ -#define LEADING_BYTE_LATIN_VISCII (CHARSET_ID_OFFSET - 23) +#define LEADING_BYTE_LATIN_VISCII (CHARSET_ID_OFFSET - 24) /* MULE VISCII-LOWER (CHARSET_ID_OFFSET_96 + '1') */ -#define LEADING_BYTE_LATIN_VISCII_LOWER (CHARSET_ID_OFFSET - 24) +#define LEADING_BYTE_LATIN_VISCII_LOWER (CHARSET_ID_OFFSET - 25) /* MULE VISCII-UPPER (CHARSET_ID_OFFSET_96 + '2') */ -#define LEADING_BYTE_LATIN_VISCII_UPPER (CHARSET_ID_OFFSET - 25) +#define LEADING_BYTE_LATIN_VISCII_UPPER (CHARSET_ID_OFFSET - 26) -#define LEADING_BYTE_ETHIOPIC_UCS (CHARSET_ID_OFFSET - 26) +#define LEADING_BYTE_ETHIOPIC_UCS (CHARSET_ID_OFFSET - 27) -#define LEADING_BYTE_DAIKANWA (CHARSET_ID_OFFSET - 27) -#define LEADING_BYTE_DAIKANWA_EKANJI (CHARSET_ID_OFFSET - 28) +#define LEADING_BYTE_DAIKANWA (CHARSET_ID_OFFSET - 28) +#define LEADING_BYTE_DAIKANWA_EKANJI (CHARSET_ID_OFFSET - 29) -#define LEADING_BYTE_GT (CHARSET_ID_OFFSET - 29) +#define LEADING_BYTE_GT (CHARSET_ID_OFFSET - 30) #define LEADING_BYTE_GT_PJ_1 (CHARSET_ID_OFFSET - 31) #define LEADING_BYTE_GT_PJ_2 (CHARSET_ID_OFFSET - 32) #define LEADING_BYTE_GT_PJ_3 (CHARSET_ID_OFFSET - 33) @@ -193,8 +133,24 @@ typedef short Charset_ID; #define LEADING_BYTE_MOJIKYO_PJ_20 (CHARSET_ID_OFFSET - 70) #define LEADING_BYTE_MOJIKYO_PJ_21 (CHARSET_ID_OFFSET - 71) +#define LEADING_BYTE_CHINA3_JEF (CHARSET_ID_OFFSET - 72) +#define LEADING_BYTE_CBETA (CHARSET_ID_OFFSET - 73) +#define LEADING_BYTE_CHINESE_BIG5_CDP (CHARSET_ID_OFFSET - 74) +#define LEADING_BYTE_HANZIKU_1 (CHARSET_ID_OFFSET - 75) +#define LEADING_BYTE_HANZIKU_2 (CHARSET_ID_OFFSET - 76) +#define LEADING_BYTE_HANZIKU_3 (CHARSET_ID_OFFSET - 77) +#define LEADING_BYTE_HANZIKU_4 (CHARSET_ID_OFFSET - 78) +#define LEADING_BYTE_HANZIKU_5 (CHARSET_ID_OFFSET - 79) +#define LEADING_BYTE_HANZIKU_6 (CHARSET_ID_OFFSET - 80) +#define LEADING_BYTE_HANZIKU_7 (CHARSET_ID_OFFSET - 81) +#define LEADING_BYTE_HANZIKU_8 (CHARSET_ID_OFFSET - 82) +#define LEADING_BYTE_HANZIKU_9 (CHARSET_ID_OFFSET - 83) +#define LEADING_BYTE_HANZIKU_10 (CHARSET_ID_OFFSET - 84) +#define LEADING_BYTE_HANZIKU_11 (CHARSET_ID_OFFSET - 85) +#define LEADING_BYTE_HANZIKU_12 (CHARSET_ID_OFFSET - 86) + #define MIN_LEADING_BYTE_PRIVATE MIN_LEADING_BYTE -#define MAX_LEADING_BYTE_PRIVATE (CHARSET_ID_OFFSET - 72) +#define MAX_LEADING_BYTE_PRIVATE (CHARSET_ID_OFFSET - 87) /* #define CHARSET_ID_OFFSET_94 (CHARSET_ID_OFFSET - '0') */ @@ -340,9 +296,6 @@ struct Lisp_Charset /* Code-point->character mapping table */ Lisp_Object decoding_table; - /* Character->code-point mapping table */ - Lisp_Object encoding_table; - /* Range of character code */ Emchar ucs_min, ucs_max; @@ -382,12 +335,19 @@ DECLARE_LRECORD (charset, Lisp_Charset); #define CHARSET_CHARS(cs) ((cs)->chars) #define CHARSET_REVERSE_DIRECTION_CHARSET(cs) ((cs)->reverse_direction_charset) #define CHARSET_DECODING_TABLE(cs) ((cs)->decoding_table) -#define CHARSET_ENCODING_TABLE(cs) ((cs)->encoding_table) #define CHARSET_UCS_MIN(cs) ((cs)->ucs_min) #define CHARSET_UCS_MAX(cs) ((cs)->ucs_max) #define CHARSET_CODE_OFFSET(cs) ((cs)->code_offset) #define CHARSET_BYTE_OFFSET(cs) ((cs)->byte_offset) +INLINE_HEADER Lisp_Object CHARSET_ENCODING_TABLE (Lisp_Charset* cs); +INLINE_HEADER Lisp_Object +CHARSET_ENCODING_TABLE (Lisp_Charset* cs) +{ + return Fgethash (CHARSET_NAME(cs), + Vchar_attribute_hash_table, + Qnil); +} #define XCHARSET_ID(cs) CHARSET_ID (XCHARSET (cs)) #define XCHARSET_NAME(cs) CHARSET_NAME (XCHARSET (cs)) @@ -468,15 +428,9 @@ CHARSET_BY_ATTRIBUTES (int chars, int dimension, int final, int dir) #define MAX_CHAR_BASIC_LATIN 0x007F /* -#define MIN_CHAR_GREEK 0x0370 -#define MAX_CHAR_GREEK 0x03CF - -#define MIN_CHAR_CYRILLIC 0x0400 -#define MAX_CHAR_CYRILLIC 0x045F -*/ - #define MIN_CHAR_HEBREW 0x0590 #define MAX_CHAR_HEBREW 0x05EF +*/ #define MIN_CHAR_THAI 0x0E00 #define MAX_CHAR_THAI 0x0E5F @@ -496,10 +450,16 @@ CHARSET_BY_ATTRIBUTES (int chars, int dimension, int final, int dir) #define MIN_CHAR_DAIKANWA 0x00E00000 #define MAX_CHAR_DAIKANWA (MIN_CHAR_DAIKANWA + 50100) /* 0xE0FFFF */ +/* #define MIN_CHAR_MOJIKYO_0 MIN_CHAR_DAIKANWA #define MAX_CHAR_MOJIKYO_0 (MIN_CHAR_MOJIKYO_0 + 94 * 60 * 22) +*/ +#define MIN_CHAR_CBETA 0x00E20000 +#define MAX_CHAR_CBETA 0x00E2FFFF +#define MIN_CHAR_CHINA3_JEF 0x00E80000 +#define MAX_CHAR_CHINA3_JEF 0x00E8FFFF -#define MIN_CHAR_94 0xE90940 +#define MIN_CHAR_94 0x00E90940 #define MAX_CHAR_94 (MIN_CHAR_94 + 94 * 80 - 1) #define MIN_CHAR_96 (MIN_CHAR_94 + 94 * 80) #define MAX_CHAR_96 (MIN_CHAR_96 + 96 * 80 - 1) @@ -515,6 +475,32 @@ CHARSET_BY_ATTRIBUTES (int chars, int dimension, int final, int dir) #define MAX_CHAR_MOJIKYO (MIN_CHAR_MOJIKYO + 94 * 60 * 22) #define MIN_CHAR_GT 0x61000000 #define MAX_CHAR_GT (MIN_CHAR_GT + 66773) +#define MIN_CHAR_BIG5_CDP 0x62000000 +#define MAX_CHAR_BIG5_CDP 0x6200FFFF +#define MIN_CHAR_HANZIKU_1 (0x62000000 + 65536 * 1) +#define MAX_CHAR_HANZIKU_1 (0x62000000 + 65536 * 1 + 65535) +#define MIN_CHAR_HANZIKU_2 (0x62000000 + 65536 * 2) +#define MAX_CHAR_HANZIKU_2 (0x62000000 + 65536 * 2 + 65535) +#define MIN_CHAR_HANZIKU_3 (0x62000000 + 65536 * 3) +#define MAX_CHAR_HANZIKU_3 (0x62000000 + 65536 * 3 + 65535) +#define MIN_CHAR_HANZIKU_4 (0x62000000 + 65536 * 4) +#define MAX_CHAR_HANZIKU_4 (0x62000000 + 65536 * 4 + 65535) +#define MIN_CHAR_HANZIKU_5 (0x62000000 + 65536 * 5) +#define MAX_CHAR_HANZIKU_5 (0x62000000 + 65536 * 5 + 65535) +#define MIN_CHAR_HANZIKU_6 (0x62000000 + 65536 * 6) +#define MAX_CHAR_HANZIKU_6 (0x62000000 + 65536 * 6 + 65535) +#define MIN_CHAR_HANZIKU_7 (0x62000000 + 65536 * 7) +#define MAX_CHAR_HANZIKU_7 (0x62000000 + 65536 * 7 + 65535) +#define MIN_CHAR_HANZIKU_8 (0x62000000 + 65536 * 8) +#define MAX_CHAR_HANZIKU_8 (0x62000000 + 65536 * 8 + 65535) +#define MIN_CHAR_HANZIKU_9 (0x62000000 + 65536 * 9) +#define MAX_CHAR_HANZIKU_9 (0x62000000 + 65536 * 9 + 65535) +#define MIN_CHAR_HANZIKU_10 (0x62000000 + 65536 * 10) +#define MAX_CHAR_HANZIKU_10 (0x62000000 + 65536 * 10 + 65535) +#define MIN_CHAR_HANZIKU_11 (0x62000000 + 65536 * 11) +#define MAX_CHAR_HANZIKU_11 (0x62000000 + 65536 * 11 + 65535) +#define MIN_CHAR_HANZIKU_12 (0x62000000 + 65536 * 12) +#define MAX_CHAR_HANZIKU_12 (0x62000000 + 65536 * 12 + 65535) Emchar decode_builtin_char (Lisp_Object charset, int code_point); @@ -547,9 +533,10 @@ extern Lisp_Object Vcharset_chinese_big5; extern Lisp_Object Vcharset_chinese_big5_1; extern Lisp_Object Vcharset_chinese_big5_2; -INLINE_HEADER Emchar DECODE_CHAR (Lisp_Object charset, int code_point); INLINE_HEADER Emchar -DECODE_CHAR (Lisp_Object charset, int code_point) +DECODE_DEFINED_CHAR (Lisp_Object charset, int code_point); +INLINE_HEADER Emchar +DECODE_DEFINED_CHAR (Lisp_Object charset, int code_point) { int dim = XCHARSET_DIMENSION (charset); Lisp_Object decoding_table = XCHARSET_DECODING_TABLE (charset); @@ -573,7 +560,18 @@ DECODE_CHAR (Lisp_Object charset, int code_point) else break; } - if (XCHARSET_DIMENSION (charset) == 1) + return -1; +} + +INLINE_HEADER Emchar DECODE_CHAR (Lisp_Object charset, int code_point); +INLINE_HEADER Emchar +DECODE_CHAR (Lisp_Object charset, int code_point) +{ + Emchar char_id = DECODE_DEFINED_CHAR (charset, code_point); + + if (char_id >= 0) + return char_id; + else if (XCHARSET_DIMENSION (charset) == 1) return decode_builtin_char (charset, code_point); else if (EQ (charset, Vcharset_chinese_big5_1)) { @@ -616,7 +614,7 @@ DECODE_CHAR (Lisp_Object charset, int code_point) { int plane = LEADING_BYTE_MOJIKYO_PJ_1 - XCHARSET_ID (charset); - if ( (0 <= plane) && (plane <= 21) ) + if ( (0 <= plane) && (plane < 21) ) { int m = DECODE_MOJIKYO_2022 (plane + 33, code_point >> 8, @@ -656,8 +654,9 @@ charset_code_point (Lisp_Object charset, Emchar ch) Lisp_Object encoding_table = XCHARSET_ENCODING_TABLE (charset); Lisp_Object ret; - if ( CHAR_ID_TABLE_P (encoding_table) - && INTP (ret = get_char_id_table (ch, encoding_table)) ) + if ( CHAR_TABLEP (encoding_table) + && INTP (ret = get_char_id_table (XCHAR_TABLE(encoding_table), + ch)) ) return XINT (ret); else return range_charset_code_point (charset, ch); @@ -680,8 +679,10 @@ encode_char_1 (Emchar ch, Lisp_Object* charset) Lisp_Object encoding_table = XCHARSET_ENCODING_TABLE (*charset); Lisp_Object ret; - if ( CHAR_ID_TABLE_P (encoding_table) - && INTP (ret = get_char_id_table (ch, encoding_table)) ) + if ( CHAR_TABLEP (encoding_table) + && INTP (ret + = get_char_id_table (XCHAR_TABLE(encoding_table), + ch)) ) return XINT (ret); else { @@ -783,8 +784,14 @@ CHAR_TO_CHARC (Emchar ch) EXFUN (Fget_charset, 1); +extern Lisp_Object Qucs; + extern Lisp_Object Vcharset_japanese_jisx0208; extern Lisp_Object Vcharset_japanese_jisx0208_1990; extern Lisp_Object Vcharset_japanese_jisx0212; +Lisp_Object put_char_ccs_code_point (Lisp_Object character, + Lisp_Object ccs, Lisp_Object value); +Lisp_Object remove_char_ccs (Lisp_Object character, Lisp_Object ccs); + #endif /* INCLUDED_char_ucs_h_ */