69 |
|
|
70 |
/* Special charset symbols. */ |
/* Special charset symbols. */ |
71 |
Lisp_Object Qascii; |
Lisp_Object Qascii; |
72 |
Lisp_Object Qeight_bit_control; |
Lisp_Object Qeight_bit; |
|
Lisp_Object Qeight_bit_graphic; |
|
73 |
Lisp_Object Qiso_8859_1; |
Lisp_Object Qiso_8859_1; |
74 |
Lisp_Object Qunicode; |
Lisp_Object Qunicode; |
75 |
|
|
76 |
/* The corresponding charsets. */ |
/* The corresponding charsets. */ |
77 |
int charset_ascii; |
int charset_ascii; |
78 |
int charset_8_bit_control; |
int charset_eight_bit; |
|
int charset_8_bit_graphic; |
|
79 |
int charset_iso_8859_1; |
int charset_iso_8859_1; |
80 |
int charset_unicode; |
int charset_unicode; |
81 |
|
|
1014 |
hash_code); |
hash_code); |
1015 |
if (charset_table_used == charset_table_size) |
if (charset_table_used == charset_table_size) |
1016 |
{ |
{ |
1017 |
charset_table_size += 256; |
struct charset *new_table |
1018 |
charset_table |
= (struct charset *) xmalloc (sizeof (struct charset) |
1019 |
= ((struct charset *) |
* (charset_table_size + 16)); |
1020 |
xrealloc (charset_table, |
bcopy (charset_table, new_table, |
1021 |
sizeof (struct charset) * charset_table_size)); |
sizeof (struct charset) * charset_table_size); |
1022 |
|
charset_table_size += 16; |
1023 |
|
charset_table = new_table; |
1024 |
} |
} |
1025 |
id = charset_table_used++; |
id = charset_table_used++; |
1026 |
new_definition_p = 1; |
new_definition_p = 1; |
1066 |
return Qnil; |
return Qnil; |
1067 |
} |
} |
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 |
|
|
1137 |
DEFUN ("define-charset-alias", Fdefine_charset_alias, |
DEFUN ("define-charset-alias", Fdefine_charset_alias, |
1138 |
Sdefine_charset_alias, 2, 2, 0, |
Sdefine_charset_alias, 2, 2, 0, |
1139 |
doc: /* Define ALIAS as an alias for charset CHARSET. */) |
doc: /* Define ALIAS as an alias for charset CHARSET. */) |
2052 |
|
|
2053 |
DEFSYM (Qascii, "ascii"); |
DEFSYM (Qascii, "ascii"); |
2054 |
DEFSYM (Qunicode, "unicode"); |
DEFSYM (Qunicode, "unicode"); |
2055 |
DEFSYM (Qeight_bit_control, "eight-bit-control"); |
DEFSYM (Qeight_bit, "eight-bit"); |
|
DEFSYM (Qeight_bit_graphic, "eight-bit-graphic"); |
|
2056 |
DEFSYM (Qiso_8859_1, "iso-8859-1"); |
DEFSYM (Qiso_8859_1, "iso-8859-1"); |
2057 |
|
|
2058 |
DEFSYM (Qgl, "gl"); |
DEFSYM (Qgl, "gl"); |
2114 |
doc: /* List of all charsets ever defined. */); |
doc: /* List of all charsets ever defined. */); |
2115 |
Vcharset_list = Qnil; |
Vcharset_list = Qnil; |
2116 |
|
|
2117 |
/* Make the prerequisite charset `ascii' and `unicode'. */ |
charset_ascii |
2118 |
{ |
= define_charset_internal (Qascii, 1, "\x00\x7F\x00\x00\x00\x00", |
2119 |
Lisp_Object args[charset_arg_max]; |
0, 127, 'B', -1, 0, 1, 0, 0); |
2120 |
Lisp_Object plist[14]; |
charset_unicode |
2121 |
Lisp_Object val; |
= define_charset_internal (Qunicode, 3, "\x00\x7F\x00\x7F\x00\x10", |
2122 |
|
0, MAX_UNICODE_CHAR, -1, 0, -1, 1, 0, 0); |
2123 |
plist[0] = intern (":name"); |
charset_eight_bit |
2124 |
plist[2] = intern (":dimension"); |
= define_charset_internal (Qeight_bit, 1, "\x80\xFF\x00\x00\x00\x00", |
2125 |
plist[4] = intern (":code-space"); |
128, 255, -1, 0, -1, 0, 0, |
2126 |
plist[6] = intern (":iso-final-char"); |
MAX_5_BYTE_CHAR + 1); |
|
plist[8] = intern (":emacs-mule-id"); |
|
|
plist[10] = intern (":ascii-compatible-p"); |
|
|
plist[12] = intern (":code-offset"); |
|
|
|
|
|
args[charset_arg_name] = Qascii; |
|
|
args[charset_arg_dimension] = make_number (1); |
|
|
val = Fmake_vector (make_number (8), make_number (0)); |
|
|
ASET (val, 1, make_number (127)); |
|
|
args[charset_arg_code_space] = val; |
|
|
args[charset_arg_min_code] = Qnil; |
|
|
args[charset_arg_max_code] = Qnil; |
|
|
args[charset_arg_iso_final] = make_number ('B'); |
|
|
args[charset_arg_iso_revision] = Qnil; |
|
|
args[charset_arg_emacs_mule_id] = make_number (0); |
|
|
args[charset_arg_ascii_compatible_p] = Qt; |
|
|
args[charset_arg_supplementary_p] = Qnil; |
|
|
args[charset_arg_invalid_code] = Qnil; |
|
|
args[charset_arg_code_offset] = make_number (0); |
|
|
args[charset_arg_map] = Qnil; |
|
|
args[charset_arg_subset] = Qnil; |
|
|
args[charset_arg_superset] = Qnil; |
|
|
args[charset_arg_unify_map] = Qnil; |
|
|
/* The actual plist is set by mule-conf.el. */ |
|
|
plist[1] = args[charset_arg_name]; |
|
|
plist[3] = args[charset_arg_dimension]; |
|
|
plist[5] = args[charset_arg_code_space]; |
|
|
plist[7] = args[charset_arg_iso_final]; |
|
|
plist[9] = args[charset_arg_emacs_mule_id]; |
|
|
plist[11] = args[charset_arg_ascii_compatible_p]; |
|
|
plist[13] = args[charset_arg_code_offset]; |
|
|
args[charset_arg_plist] = Flist (14, plist); |
|
|
Fdefine_charset_internal (charset_arg_max, args); |
|
|
charset_ascii = XINT (CHARSET_SYMBOL_ID (Qascii)); |
|
|
|
|
|
args[charset_arg_name] = Qunicode; |
|
|
args[charset_arg_dimension] = make_number (3); |
|
|
val = Fmake_vector (make_number (8), make_number (0)); |
|
|
ASET (val, 1, make_number (255)); |
|
|
ASET (val, 3, make_number (255)); |
|
|
ASET (val, 5, make_number (16)); |
|
|
args[charset_arg_code_space] = val; |
|
|
args[charset_arg_min_code] = Qnil; |
|
|
args[charset_arg_max_code] = Qnil; |
|
|
args[charset_arg_iso_final] = Qnil; |
|
|
args[charset_arg_iso_revision] = Qnil; |
|
|
args[charset_arg_emacs_mule_id] = Qnil; |
|
|
args[charset_arg_ascii_compatible_p] = Qt; |
|
|
args[charset_arg_supplementary_p] = Qnil; |
|
|
args[charset_arg_invalid_code] = Qnil; |
|
|
args[charset_arg_code_offset] = make_number (0); |
|
|
args[charset_arg_map] = Qnil; |
|
|
args[charset_arg_subset] = Qnil; |
|
|
args[charset_arg_superset] = Qnil; |
|
|
args[charset_arg_unify_map] = Qnil; |
|
|
/* The actual plist is set by mule-conf.el. */ |
|
|
plist[1] = args[charset_arg_name]; |
|
|
plist[3] = args[charset_arg_dimension]; |
|
|
plist[5] = args[charset_arg_code_space]; |
|
|
plist[7] = args[charset_arg_iso_final]; |
|
|
plist[9] = args[charset_arg_emacs_mule_id]; |
|
|
plist[11] = args[charset_arg_ascii_compatible_p]; |
|
|
plist[13] = args[charset_arg_code_offset]; |
|
|
args[charset_arg_plist] = Flist (14, plist); |
|
|
Fdefine_charset_internal (charset_arg_max, args); |
|
|
charset_unicode = XINT (CHARSET_SYMBOL_ID (Qunicode)); |
|
|
} |
|
2127 |
} |
} |
2128 |
|
|
2129 |
#endif /* emacs */ |
#endif /* emacs */ |