diff options
| author | Kenichi Handa | 2002-07-31 07:07:59 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2002-07-31 07:07:59 +0000 |
| commit | 2fe1edd1f8b733fe4d15f3d2b7545c4445fbc851 (patch) | |
| tree | 1e7f37d35e1d51e52eb2f279a94b67a8f19e51b2 | |
| parent | 3c5a53bdceac9d8b81afdee50b6b9098ef5ec094 (diff) | |
| download | emacs-2fe1edd1f8b733fe4d15f3d2b7545c4445fbc851.tar.gz emacs-2fe1edd1f8b733fe4d15f3d2b7545c4445fbc851.zip | |
(charset_eight_bit, Qeight_bit_control): New
variables.
(charset_8_bit__control, charset_8_bit_graphic,
Qeight_bit_control, Qeight_bit_graphic): These variables deleted.
(define_charset_internal): New function.
(syms_of_charset): Call define_charset_internal for pre-defined
charsets.
| -rw-r--r-- | src/charset.c | 175 |
1 files changed, 88 insertions, 87 deletions
diff --git a/src/charset.c b/src/charset.c index a98c25e06ff..1d0706bbff4 100644 --- a/src/charset.c +++ b/src/charset.c | |||
| @@ -69,15 +69,13 @@ Lisp_Object Qcharsetp; | |||
| 69 | 69 | ||
| 70 | /* Special charset symbols. */ | 70 | /* Special charset symbols. */ |
| 71 | Lisp_Object Qascii; | 71 | Lisp_Object Qascii; |
| 72 | Lisp_Object Qeight_bit_control; | 72 | Lisp_Object Qeight_bit; |
| 73 | Lisp_Object Qeight_bit_graphic; | ||
| 74 | Lisp_Object Qiso_8859_1; | 73 | Lisp_Object Qiso_8859_1; |
| 75 | Lisp_Object Qunicode; | 74 | Lisp_Object Qunicode; |
| 76 | 75 | ||
| 77 | /* The corresponding charsets. */ | 76 | /* The corresponding charsets. */ |
| 78 | int charset_ascii; | 77 | int charset_ascii; |
| 79 | int charset_8_bit_control; | 78 | int charset_eight_bit; |
| 80 | int charset_8_bit_graphic; | ||
| 81 | int charset_iso_8859_1; | 79 | int charset_iso_8859_1; |
| 82 | int charset_unicode; | 80 | int charset_unicode; |
| 83 | 81 | ||
| @@ -1016,11 +1014,13 @@ usage: (define-charset-internal ...) */) | |||
| 1016 | hash_code); | 1014 | hash_code); |
| 1017 | if (charset_table_used == charset_table_size) | 1015 | if (charset_table_used == charset_table_size) |
| 1018 | { | 1016 | { |
| 1019 | charset_table_size += 256; | 1017 | struct charset *new_table |
| 1020 | charset_table | 1018 | = (struct charset *) xmalloc (sizeof (struct charset) |
| 1021 | = ((struct charset *) | 1019 | * (charset_table_size + 16)); |
| 1022 | xrealloc (charset_table, | 1020 | bcopy (charset_table, new_table, |
| 1023 | sizeof (struct charset) * charset_table_size)); | 1021 | sizeof (struct charset) * charset_table_size); |
| 1022 | charset_table_size += 16; | ||
| 1023 | charset_table = new_table; | ||
| 1024 | } | 1024 | } |
| 1025 | id = charset_table_used++; | 1025 | id = charset_table_used++; |
| 1026 | new_definition_p = 1; | 1026 | new_definition_p = 1; |
| @@ -1066,6 +1066,74 @@ usage: (define-charset-internal ...) */) | |||
| 1066 | return Qnil; | 1066 | return Qnil; |
| 1067 | } | 1067 | } |
| 1068 | 1068 | ||
| 1069 | |||
| 1070 | /* Same as Fdefine_charset_internal but arguments are more convenient | ||
| 1071 | to call from C (typically in syms_of_charset). This can define a | ||
| 1072 | charset of `offset' method only. Return the ID of the new | ||
| 1073 | charset. */ | ||
| 1074 | |||
| 1075 | static int | ||
| 1076 | define_charset_internal (name, dimension, code_space, min_code, max_code, | ||
| 1077 | iso_final, iso_revision, emacs_mule_id, | ||
| 1078 | ascii_compatible, supprementary, | ||
| 1079 | code_offset) | ||
| 1080 | Lisp_Object name; | ||
| 1081 | int dimension; | ||
| 1082 | unsigned char *code_space; | ||
| 1083 | unsigned min_code, max_code; | ||
| 1084 | int iso_final, iso_revision, emacs_mule_id; | ||
| 1085 | int ascii_compatible, supprementary; | ||
| 1086 | int code_offset; | ||
| 1087 | { | ||
| 1088 | Lisp_Object args[charset_arg_max]; | ||
| 1089 | Lisp_Object plist[14]; | ||
| 1090 | Lisp_Object val; | ||
| 1091 | int i; | ||
| 1092 | |||
| 1093 | args[charset_arg_name] = name; | ||
| 1094 | args[charset_arg_dimension] = make_number (dimension); | ||
| 1095 | val = Fmake_vector (make_number (8), make_number (0)); | ||
| 1096 | for (i = 0; i < 8; i++) | ||
| 1097 | ASET (val, i, make_number (code_space[i])); | ||
| 1098 | args[charset_arg_code_space] = val; | ||
| 1099 | args[charset_arg_min_code] = make_number (min_code); | ||
| 1100 | args[charset_arg_max_code] = make_number (max_code); | ||
| 1101 | args[charset_arg_iso_final] | ||
| 1102 | = (iso_final < 0 ? Qnil : make_number (iso_final)); | ||
| 1103 | args[charset_arg_iso_revision] = make_number (iso_revision); | ||
| 1104 | args[charset_arg_emacs_mule_id] | ||
| 1105 | = (emacs_mule_id < 0 ? Qnil : make_number (emacs_mule_id)); | ||
| 1106 | args[charset_arg_ascii_compatible_p] = ascii_compatible ? Qt : Qnil; | ||
| 1107 | args[charset_arg_supplementary_p] = supprementary ? Qt : Qnil; | ||
| 1108 | args[charset_arg_invalid_code] = Qnil; | ||
| 1109 | args[charset_arg_code_offset] = make_number (code_offset); | ||
| 1110 | args[charset_arg_map] = Qnil; | ||
| 1111 | args[charset_arg_subset] = Qnil; | ||
| 1112 | args[charset_arg_superset] = Qnil; | ||
| 1113 | args[charset_arg_unify_map] = Qnil; | ||
| 1114 | |||
| 1115 | plist[0] = intern (":name"); | ||
| 1116 | plist[1] = args[charset_arg_name]; | ||
| 1117 | plist[2] = intern (":dimension"); | ||
| 1118 | plist[3] = args[charset_arg_dimension]; | ||
| 1119 | plist[4] = intern (":code-space"); | ||
| 1120 | plist[5] = args[charset_arg_code_space]; | ||
| 1121 | plist[6] = intern (":iso-final-char"); | ||
| 1122 | plist[7] = args[charset_arg_iso_final]; | ||
| 1123 | plist[8] = intern (":emacs-mule-id"); | ||
| 1124 | plist[9] = args[charset_arg_emacs_mule_id]; | ||
| 1125 | plist[10] = intern (":ascii-compatible-p"); | ||
| 1126 | plist[11] = args[charset_arg_ascii_compatible_p]; | ||
| 1127 | plist[12] = intern (":code-offset"); | ||
| 1128 | plist[13] = args[charset_arg_code_offset]; | ||
| 1129 | |||
| 1130 | args[charset_arg_plist] = Flist (14, plist); | ||
| 1131 | Fdefine_charset_internal (charset_arg_max, args); | ||
| 1132 | |||
| 1133 | return XINT (CHARSET_SYMBOL_ID (name)); | ||
| 1134 | } | ||
| 1135 | |||
| 1136 | |||
| 1069 | DEFUN ("define-charset-alias", Fdefine_charset_alias, | 1137 | DEFUN ("define-charset-alias", Fdefine_charset_alias, |
| 1070 | Sdefine_charset_alias, 2, 2, 0, | 1138 | Sdefine_charset_alias, 2, 2, 0, |
| 1071 | doc: /* Define ALIAS as an alias for charset CHARSET. */) | 1139 | doc: /* Define ALIAS as an alias for charset CHARSET. */) |
| @@ -1984,8 +2052,7 @@ syms_of_charset () | |||
| 1984 | 2052 | ||
| 1985 | DEFSYM (Qascii, "ascii"); | 2053 | DEFSYM (Qascii, "ascii"); |
| 1986 | DEFSYM (Qunicode, "unicode"); | 2054 | DEFSYM (Qunicode, "unicode"); |
| 1987 | DEFSYM (Qeight_bit_control, "eight-bit-control"); | 2055 | DEFSYM (Qeight_bit, "eight-bit"); |
| 1988 | DEFSYM (Qeight_bit_graphic, "eight-bit-graphic"); | ||
| 1989 | DEFSYM (Qiso_8859_1, "iso-8859-1"); | 2056 | DEFSYM (Qiso_8859_1, "iso-8859-1"); |
| 1990 | 2057 | ||
| 1991 | DEFSYM (Qgl, "gl"); | 2058 | DEFSYM (Qgl, "gl"); |
| @@ -2047,82 +2114,16 @@ The default value is sub-directory "charsets" of `data-directory'. */); | |||
| 2047 | doc: /* List of all charsets ever defined. */); | 2114 | doc: /* List of all charsets ever defined. */); |
| 2048 | Vcharset_list = Qnil; | 2115 | Vcharset_list = Qnil; |
| 2049 | 2116 | ||
| 2050 | /* Make the prerequisite charset `ascii' and `unicode'. */ | 2117 | charset_ascii |
| 2051 | { | 2118 | = define_charset_internal (Qascii, 1, "\x00\x7F\x00\x00\x00\x00", |
| 2052 | Lisp_Object args[charset_arg_max]; | 2119 | 0, 127, 'B', -1, 0, 1, 0, 0); |
| 2053 | Lisp_Object plist[14]; | 2120 | charset_unicode |
| 2054 | Lisp_Object val; | 2121 | = define_charset_internal (Qunicode, 3, "\x00\x7F\x00\x7F\x00\x10", |
| 2055 | 2122 | 0, MAX_UNICODE_CHAR, -1, 0, -1, 1, 0, 0); | |
| 2056 | plist[0] = intern (":name"); | 2123 | charset_eight_bit |
| 2057 | plist[2] = intern (":dimension"); | 2124 | = define_charset_internal (Qeight_bit, 1, "\x80\xFF\x00\x00\x00\x00", |
| 2058 | plist[4] = intern (":code-space"); | 2125 | 128, 255, -1, 0, -1, 0, 0, |
| 2059 | plist[6] = intern (":iso-final-char"); | 2126 | MAX_5_BYTE_CHAR + 1); |
| 2060 | plist[8] = intern (":emacs-mule-id"); | ||
| 2061 | plist[10] = intern (":ascii-compatible-p"); | ||
| 2062 | plist[12] = intern (":code-offset"); | ||
| 2063 | |||
| 2064 | args[charset_arg_name] = Qascii; | ||
| 2065 | args[charset_arg_dimension] = make_number (1); | ||
| 2066 | val = Fmake_vector (make_number (8), make_number (0)); | ||
| 2067 | ASET (val, 1, make_number (127)); | ||
| 2068 | args[charset_arg_code_space] = val; | ||
| 2069 | args[charset_arg_min_code] = Qnil; | ||
| 2070 | args[charset_arg_max_code] = Qnil; | ||
| 2071 | args[charset_arg_iso_final] = make_number ('B'); | ||
| 2072 | args[charset_arg_iso_revision] = Qnil; | ||
| 2073 | args[charset_arg_emacs_mule_id] = make_number (0); | ||
| 2074 | args[charset_arg_ascii_compatible_p] = Qt; | ||
| 2075 | args[charset_arg_supplementary_p] = Qnil; | ||
| 2076 | args[charset_arg_invalid_code] = Qnil; | ||
| 2077 | args[charset_arg_code_offset] = make_number (0); | ||
| 2078 | args[charset_arg_map] = Qnil; | ||
| 2079 | args[charset_arg_subset] = Qnil; | ||
| 2080 | args[charset_arg_superset] = Qnil; | ||
| 2081 | args[charset_arg_unify_map] = Qnil; | ||
| 2082 | /* The actual plist is set by mule-conf.el. */ | ||
| 2083 | plist[1] = args[charset_arg_name]; | ||
| 2084 | plist[3] = args[charset_arg_dimension]; | ||
| 2085 | plist[5] = args[charset_arg_code_space]; | ||
| 2086 | plist[7] = args[charset_arg_iso_final]; | ||
| 2087 | plist[9] = args[charset_arg_emacs_mule_id]; | ||
| 2088 | plist[11] = args[charset_arg_ascii_compatible_p]; | ||
| 2089 | plist[13] = args[charset_arg_code_offset]; | ||
| 2090 | args[charset_arg_plist] = Flist (14, plist); | ||
| 2091 | Fdefine_charset_internal (charset_arg_max, args); | ||
| 2092 | charset_ascii = XINT (CHARSET_SYMBOL_ID (Qascii)); | ||
| 2093 | |||
| 2094 | args[charset_arg_name] = Qunicode; | ||
| 2095 | args[charset_arg_dimension] = make_number (3); | ||
| 2096 | val = Fmake_vector (make_number (8), make_number (0)); | ||
| 2097 | ASET (val, 1, make_number (255)); | ||
| 2098 | ASET (val, 3, make_number (255)); | ||
| 2099 | ASET (val, 5, make_number (16)); | ||
| 2100 | args[charset_arg_code_space] = val; | ||
| 2101 | args[charset_arg_min_code] = Qnil; | ||
| 2102 | args[charset_arg_max_code] = Qnil; | ||
| 2103 | args[charset_arg_iso_final] = Qnil; | ||
| 2104 | args[charset_arg_iso_revision] = Qnil; | ||
| 2105 | args[charset_arg_emacs_mule_id] = Qnil; | ||
| 2106 | args[charset_arg_ascii_compatible_p] = Qt; | ||
| 2107 | args[charset_arg_supplementary_p] = Qnil; | ||
| 2108 | args[charset_arg_invalid_code] = Qnil; | ||
| 2109 | args[charset_arg_code_offset] = make_number (0); | ||
| 2110 | args[charset_arg_map] = Qnil; | ||
| 2111 | args[charset_arg_subset] = Qnil; | ||
| 2112 | args[charset_arg_superset] = Qnil; | ||
| 2113 | args[charset_arg_unify_map] = Qnil; | ||
| 2114 | /* The actual plist is set by mule-conf.el. */ | ||
| 2115 | plist[1] = args[charset_arg_name]; | ||
| 2116 | plist[3] = args[charset_arg_dimension]; | ||
| 2117 | plist[5] = args[charset_arg_code_space]; | ||
| 2118 | plist[7] = args[charset_arg_iso_final]; | ||
| 2119 | plist[9] = args[charset_arg_emacs_mule_id]; | ||
| 2120 | plist[11] = args[charset_arg_ascii_compatible_p]; | ||
| 2121 | plist[13] = args[charset_arg_code_offset]; | ||
| 2122 | args[charset_arg_plist] = Flist (14, plist); | ||
| 2123 | Fdefine_charset_internal (charset_arg_max, args); | ||
| 2124 | charset_unicode = XINT (CHARSET_SYMBOL_ID (Qunicode)); | ||
| 2125 | } | ||
| 2126 | } | 2127 | } |
| 2127 | 2128 | ||
| 2128 | #endif /* emacs */ | 2129 | #endif /* emacs */ |