annotate src/mule-charset.c @ 510:5bdbc721d46a

[xemacs-hg @ 2001-05-06 08:33:35 by ben] implement printing the selection when it's selected. force redisplay when set-charset-ccl-program called. if bytecomp or byte-optimize need recompiling, then load the .el version of them first, recompile them, and reload the .elc versions to recompile everything else (so we won't be waiting until the cows come home).
author ben
date Sun, 06 May 2001 08:33:41 +0000
parents 3d3049ae1304
children 1c3b60121364
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Functions to handle multilingual characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1992, 1995 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 Copyright (C) 1995 Sun Microsystems, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 /* Synched up with: FSF 20.3. Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 /* Rewritten by Ben Wing <ben@xemacs.org>. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 #include "buffer.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 #include "chartab.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 #include "elhash.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 #include "lstream.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 #include "device.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 #include "faces.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 #include "mule-ccl.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 /* The various pre-defined charsets. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 Lisp_Object Vcharset_ascii;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 Lisp_Object Vcharset_control_1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 Lisp_Object Vcharset_latin_iso8859_1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 Lisp_Object Vcharset_latin_iso8859_2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 Lisp_Object Vcharset_latin_iso8859_3;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 Lisp_Object Vcharset_latin_iso8859_4;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 Lisp_Object Vcharset_thai_tis620;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 Lisp_Object Vcharset_greek_iso8859_7;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 Lisp_Object Vcharset_arabic_iso8859_6;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 Lisp_Object Vcharset_hebrew_iso8859_8;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 Lisp_Object Vcharset_katakana_jisx0201;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Lisp_Object Vcharset_latin_jisx0201;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Lisp_Object Vcharset_cyrillic_iso8859_5;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 Lisp_Object Vcharset_latin_iso8859_9;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 Lisp_Object Vcharset_japanese_jisx0208_1978;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Lisp_Object Vcharset_chinese_gb2312;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Lisp_Object Vcharset_japanese_jisx0208;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Lisp_Object Vcharset_korean_ksc5601;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Lisp_Object Vcharset_japanese_jisx0212;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 Lisp_Object Vcharset_chinese_cns11643_1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 Lisp_Object Vcharset_chinese_cns11643_2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 Lisp_Object Vcharset_chinese_big5_1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 Lisp_Object Vcharset_chinese_big5_2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 #ifdef ENABLE_COMPOSITE_CHARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 Lisp_Object Vcharset_composite;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 /* Hash tables for composite chars. One maps string representing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 composed chars to their equivalent chars; one goes the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 other way. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 Lisp_Object Vcomposite_char_char2string_hash_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 Lisp_Object Vcomposite_char_string2char_hash_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 static int composite_char_row_next;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 static int composite_char_col_next;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 #endif /* ENABLE_COMPOSITE_CHARS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 struct charset_lookup *chlook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 static const struct lrecord_description charset_lookup_description_1[] = {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
80 { XD_LISP_OBJECT_ARRAY, offsetof (struct charset_lookup, charset_by_leading_byte), 128+4*128*2 },
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 { XD_END }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 static const struct struct_description charset_lookup_description = {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
85 sizeof (struct charset_lookup),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 charset_lookup_description_1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 /* Table of number of bytes in the string representation of a character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 indexed by the first byte of that representation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 rep_bytes_by_first_byte(c) is more efficient than the equivalent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 canonical computation:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
95 XCHARSET_REP_BYTES (CHARSET_BY_LEADING_BYTE (c)) */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
97 const Bytecount rep_bytes_by_first_byte[0xA0] =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 { /* 0x00 - 0x7f are for straight ASCII */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 /* 0x80 - 0x8f are for Dimension-1 official charsets */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 /* 0x90 - 0x9d are for Dimension-2 official charsets */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 /* 0x9e is for Dimension-1 private charsets */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 /* 0x9f is for Dimension-2 private charsets */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 Lisp_Object Qcharsetp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 /* Qdoc_string, Qdimension, Qchars defined in general.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 Lisp_Object Qregistry, Qfinal, Qgraphic;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 Lisp_Object Qdirection;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 Lisp_Object Qreverse_direction_charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 Lisp_Object Qleading_byte;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 Lisp_Object Qshort_name, Qlong_name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 Lisp_Object Qascii,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 Qcontrol_1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 Qlatin_iso8859_1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 Qlatin_iso8859_2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 Qlatin_iso8859_3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 Qlatin_iso8859_4,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 Qthai_tis620,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 Qgreek_iso8859_7,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 Qarabic_iso8859_6,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 Qhebrew_iso8859_8,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 Qkatakana_jisx0201,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 Qlatin_jisx0201,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 Qcyrillic_iso8859_5,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 Qlatin_iso8859_9,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 Qjapanese_jisx0208_1978,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 Qchinese_gb2312,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 Qjapanese_jisx0208,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 Qkorean_ksc5601,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 Qjapanese_jisx0212,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 Qchinese_cns11643_1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 Qchinese_cns11643_2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 Qchinese_big5_1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 Qchinese_big5_2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 Qcomposite;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 Lisp_Object Ql2r, Qr2l;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 Lisp_Object Vcharset_hash_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 /* Composite characters are characters constructed by overstriking two
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 or more regular characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 1) The old Mule implementation involves storing composite characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 in a buffer as a tag followed by all of the actual characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 used to make up the composite character. I think this is a bad
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 idea; it greatly complicates code that wants to handle strings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 one character at a time because it has to deal with the possibility
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 of great big ungainly characters. It's much more reasonable to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 simply store an index into a table of composite characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 2) The current implementation only allows for 16,384 separate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 composite characters over the lifetime of the XEmacs process.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 This could become a potential problem if the user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 edited lots of different files that use composite characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 Due to FSF bogosity, increasing the number of allowable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 composite characters under Mule would decrease the number
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 of possible faces that can exist. Mule already has shrunk
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 this to 2048, and further shrinkage would become uncomfortable.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 No such problems exist in XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 Composite characters could be represented as 0x80 C1 C2 C3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 where each C[1-3] is in the range 0xA0 - 0xFF. This allows
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 for slightly under 2^20 (one million) composite characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 over the XEmacs process lifetime, and you only need to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 increase the size of a Mule character from 19 to 21 bits.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 Or you could use 0x80 C1 C2 C3 C4, allowing for about
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 85 million (slightly over 2^26) composite characters. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 /* Basic Emchar functions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 /* Convert a non-ASCII Mule character C into a one-character Mule-encoded
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 string in STR. Returns the number of bytes stored.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 Do not call this directly. Use the macro set_charptr_emchar() instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 Bytecount
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 non_ascii_set_charptr_emchar (Bufbyte *str, Emchar c)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 Bufbyte *p;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 Bufbyte lb;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 int c1, c2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 Lisp_Object charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 p = str;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 BREAKUP_CHAR (c, charset, c1, c2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 lb = CHAR_LEADING_BYTE (c);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 if (LEADING_BYTE_PRIVATE_P (lb))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 *p++ = PRIVATE_LEADING_BYTE_PREFIX (lb);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 *p++ = lb;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 if (EQ (charset, Vcharset_control_1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 c1 += 0x20;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 *p++ = c1 | 0x80;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 if (c2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 *p++ = c2 | 0x80;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 return (p - str);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 /* Return the first character from a Mule-encoded string in STR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 assuming it's non-ASCII. Do not call this directly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 Use the macro charptr_emchar() instead. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 Emchar
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
220 non_ascii_charptr_emchar (const Bufbyte *str)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 Bufbyte i0 = *str, i1, i2 = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 Lisp_Object charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 if (i0 == LEADING_BYTE_CONTROL_1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 return (Emchar) (*++str - 0x20);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 if (LEADING_BYTE_PREFIX_P (i0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 i0 = *++str;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 i1 = *++str & 0x7F;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 charset = CHARSET_BY_LEADING_BYTE (i0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 if (XCHARSET_DIMENSION (charset) == 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 i2 = *++str & 0x7F;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 return MAKE_CHAR (charset, i1, i2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 /* Return whether CH is a valid Emchar, assuming it's non-ASCII.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 Do not call this directly. Use the macro valid_char_p() instead. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 non_ascii_valid_char_p (Emchar ch)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 int f1, f2, f3;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 /* Must have only lowest 19 bits set */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 if (ch & ~0x7FFFF)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 f1 = CHAR_FIELD1 (ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 f2 = CHAR_FIELD2 (ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 f3 = CHAR_FIELD3 (ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 if (f1 == 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 Lisp_Object charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 if (f2 < MIN_CHAR_FIELD2_OFFICIAL ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 (f2 > MAX_CHAR_FIELD2_OFFICIAL && f2 < MIN_CHAR_FIELD2_PRIVATE) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 f2 > MAX_CHAR_FIELD2_PRIVATE)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 if (f3 < 0x20)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 if (f3 != 0x20 && f3 != 0x7F && !(f2 >= MIN_CHAR_FIELD2_PRIVATE &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 f2 <= MAX_CHAR_FIELD2_PRIVATE))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 NOTE: This takes advantage of the fact that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 FIELD2_TO_OFFICIAL_LEADING_BYTE and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 FIELD2_TO_PRIVATE_LEADING_BYTE are the same.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 charset = CHARSET_BY_LEADING_BYTE (f2 + FIELD2_TO_OFFICIAL_LEADING_BYTE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 if (EQ (charset, Qnil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 return (XCHARSET_CHARS (charset) == 96);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 Lisp_Object charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 if (f1 < MIN_CHAR_FIELD1_OFFICIAL ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 (f1 > MAX_CHAR_FIELD1_OFFICIAL && f1 < MIN_CHAR_FIELD1_PRIVATE) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 f1 > MAX_CHAR_FIELD1_PRIVATE)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 if (f2 < 0x20 || f3 < 0x20)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 #ifdef ENABLE_COMPOSITE_CHARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 if (f1 + FIELD1_TO_OFFICIAL_LEADING_BYTE == LEADING_BYTE_COMPOSITE)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 if (UNBOUNDP (Fgethash (make_int (ch),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 Vcomposite_char_char2string_hash_table,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 Qunbound)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 #endif /* ENABLE_COMPOSITE_CHARS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 if (f2 != 0x20 && f2 != 0x7F && f3 != 0x20 && f3 != 0x7F
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 && !(f1 >= MIN_CHAR_FIELD1_PRIVATE && f1 <= MAX_CHAR_FIELD1_PRIVATE))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 if (f1 <= MAX_CHAR_FIELD1_OFFICIAL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 charset =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 CHARSET_BY_LEADING_BYTE (f1 + FIELD1_TO_OFFICIAL_LEADING_BYTE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 charset =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 CHARSET_BY_LEADING_BYTE (f1 + FIELD1_TO_PRIVATE_LEADING_BYTE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 if (EQ (charset, Qnil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 return (XCHARSET_CHARS (charset) == 96);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 /* Basic string functions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
325 /* Copy the character pointed to by SRC into DST. Do not call this
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
326 directly. Use the macro charptr_copy_char() instead.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
327 Return the number of bytes copied. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 Bytecount
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
330 non_ascii_charptr_copy_char (const Bufbyte *src, Bufbyte *dst)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
332 unsigned int bytes = REP_BYTES_BY_FIRST_BYTE (*src);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
333 unsigned int i;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
334 for (i = bytes; i; i--, dst++, src++)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
335 *dst = *src;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
336 return bytes;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 /* streams of Emchars */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 /* Treat a stream as a stream of Emchar's rather than a stream of bytes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 The functions below are not meant to be called directly; use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 the macros in insdel.h. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 Emchar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 Lstream_get_emchar_1 (Lstream *stream, int ch)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 Bufbyte str[MAX_EMCHAR_LEN];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 Bufbyte *strptr = str;
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
353 unsigned int bytes;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 str[0] = (Bufbyte) ch;
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
356
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
357 for (bytes = REP_BYTES_BY_FIRST_BYTE (ch) - 1; bytes; bytes--)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
359 int c = Lstream_getc (stream);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
360 bufpos_checking_assert (c >= 0);
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
361 *++strptr = (Bufbyte) c;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 return charptr_emchar (str);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 Lstream_fput_emchar (Lstream *stream, Emchar ch)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 Bufbyte str[MAX_EMCHAR_LEN];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 Bytecount len = set_charptr_emchar (str, ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 return Lstream_write (stream, str, len);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 Lstream_funget_emchar (Lstream *stream, Emchar ch)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 Bufbyte str[MAX_EMCHAR_LEN];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 Bytecount len = set_charptr_emchar (str, ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 Lstream_unread (stream, str, len);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 /* charset object */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 mark_charset (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
390 Lisp_Charset *cs = XCHARSET (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 mark_object (cs->short_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 mark_object (cs->long_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 mark_object (cs->doc_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 mark_object (cs->registry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 mark_object (cs->ccl_program);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 return cs->name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 print_charset (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
403 Lisp_Charset *cs = XCHARSET (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 char buf[200];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 if (print_readably)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 error ("printing unreadable object #<charset %s 0x%x>",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 string_data (XSYMBOL (CHARSET_NAME (cs))->name),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 cs->header.uid);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 write_c_string ("#<charset ", printcharfun);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 print_internal (CHARSET_NAME (cs), printcharfun, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 write_c_string (" ", printcharfun);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 print_internal (CHARSET_SHORT_NAME (cs), printcharfun, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 write_c_string (" ", printcharfun);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 print_internal (CHARSET_LONG_NAME (cs), printcharfun, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 write_c_string (" ", printcharfun);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 print_internal (CHARSET_DOC_STRING (cs), printcharfun, 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 sprintf (buf, " %s %s cols=%d g%d final='%c' reg=",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 CHARSET_TYPE (cs) == CHARSET_TYPE_94 ? "94" :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 CHARSET_TYPE (cs) == CHARSET_TYPE_96 ? "96" :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 CHARSET_TYPE (cs) == CHARSET_TYPE_94X94 ? "94x94" :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 "96x96",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 CHARSET_DIRECTION (cs) == CHARSET_LEFT_TO_RIGHT ? "l2r" : "r2l",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 CHARSET_COLUMNS (cs),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 CHARSET_GRAPHIC (cs),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 CHARSET_FINAL (cs));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 write_c_string (buf, printcharfun);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 print_internal (CHARSET_REGISTRY (cs), printcharfun, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 sprintf (buf, " 0x%x>", cs->header.uid);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 write_c_string (buf, printcharfun);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 static const struct lrecord_description charset_description[] = {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
435 { XD_LISP_OBJECT, offsetof (Lisp_Charset, name) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
436 { XD_LISP_OBJECT, offsetof (Lisp_Charset, doc_string) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
437 { XD_LISP_OBJECT, offsetof (Lisp_Charset, registry) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
438 { XD_LISP_OBJECT, offsetof (Lisp_Charset, short_name) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
439 { XD_LISP_OBJECT, offsetof (Lisp_Charset, long_name) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
440 { XD_LISP_OBJECT, offsetof (Lisp_Charset, reverse_direction_charset) },
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
441 { XD_LISP_OBJECT, offsetof (Lisp_Charset, ccl_program) },
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 { XD_END }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 DEFINE_LRECORD_IMPLEMENTATION ("charset", charset,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 mark_charset, print_charset, 0, 0, 0, charset_description,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
447 Lisp_Charset);
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
448
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 /* Make a new charset. */
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
450 /* #### SJT Should generic properties be allowed? */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 make_charset (int id, Lisp_Object name, unsigned char rep_bytes,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 unsigned char type, unsigned char columns, unsigned char graphic,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 Bufbyte final, unsigned char direction, Lisp_Object short_name,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 Lisp_Object long_name, Lisp_Object doc,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 Lisp_Object reg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 Lisp_Object obj;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
459 Lisp_Charset *cs = alloc_lcrecord_type (Lisp_Charset, &lrecord_charset);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
460
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
461 zero_lcrecord (cs);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
462
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 XSETCHARSET (obj, cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 CHARSET_ID (cs) = id;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 CHARSET_NAME (cs) = name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 CHARSET_SHORT_NAME (cs) = short_name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 CHARSET_LONG_NAME (cs) = long_name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 CHARSET_REP_BYTES (cs) = rep_bytes;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 CHARSET_DIRECTION (cs) = direction;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 CHARSET_TYPE (cs) = type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 CHARSET_COLUMNS (cs) = columns;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 CHARSET_GRAPHIC (cs) = graphic;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 CHARSET_FINAL (cs) = final;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 CHARSET_DOC_STRING (cs) = doc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 CHARSET_REGISTRY (cs) = reg;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 CHARSET_CCL_PROGRAM (cs) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 CHARSET_REVERSE_DIRECTION_CHARSET (cs) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 CHARSET_DIMENSION (cs) = (CHARSET_TYPE (cs) == CHARSET_TYPE_94 ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 CHARSET_TYPE (cs) == CHARSET_TYPE_96) ? 1 : 2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 CHARSET_CHARS (cs) = (CHARSET_TYPE (cs) == CHARSET_TYPE_94 ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 CHARSET_TYPE (cs) == CHARSET_TYPE_94X94) ? 94 : 96;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 if (final)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 /* some charsets do not have final characters. This includes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 ASCII, Control-1, Composite, and the two faux private
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 charsets. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 assert (NILP (chlook->charset_by_attributes[type][final][direction]));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 chlook->charset_by_attributes[type][final][direction] = obj;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 assert (NILP (chlook->charset_by_leading_byte[id - 128]));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 chlook->charset_by_leading_byte[id - 128] = obj;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 /* Some charsets are "faux" and don't have names or really exist at
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 all except in the leading-byte table. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 if (!NILP (name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 Fputhash (name, obj, Vcharset_hash_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 return obj;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 get_unallocated_leading_byte (int dimension)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 int lb;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 if (dimension == 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
511 if (chlook->next_allocated_1_byte_leading_byte > MAX_LEADING_BYTE_PRIVATE_1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 lb = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 else
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
514 lb = chlook->next_allocated_1_byte_leading_byte++;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
518 if (chlook->next_allocated_2_byte_leading_byte > MAX_LEADING_BYTE_PRIVATE_2)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 lb = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 else
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
521 lb = chlook->next_allocated_2_byte_leading_byte++;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 if (!lb)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 signal_simple_error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 ("No more character sets free for this dimension",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 make_int (dimension));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 return lb;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 /* Basic charset Lisp functions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 DEFUN ("charsetp", Fcharsetp, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 Return non-nil if OBJECT is a charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 (object))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 return CHARSETP (object) ? Qt : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 DEFUN ("find-charset", Ffind_charset, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 Retrieve the charset of the given name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 If CHARSET-OR-NAME is a charset object, it is simply returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 Otherwise, CHARSET-OR-NAME should be a symbol. If there is no such charset,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 nil is returned. Otherwise the associated charset object is returned.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 (charset_or_name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 if (CHARSETP (charset_or_name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 return charset_or_name;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 CHECK_SYMBOL (charset_or_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 return Fgethash (charset_or_name, Vcharset_hash_table, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 DEFUN ("get-charset", Fget_charset, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 Retrieve the charset of the given name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 Same as `find-charset' except an error is signalled if there is no such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 charset instead of returning nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 (name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 Lisp_Object charset = Ffind_charset (name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 if (NILP (charset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 signal_simple_error ("No such charset", name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 return charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 /* We store the charsets in hash tables with the names as the key and the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 actual charset object as the value. Occasionally we need to use them
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 in a list format. These routines provide us with that. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 struct charset_list_closure
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 Lisp_Object *charset_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 add_charset_to_list_mapper (Lisp_Object key, Lisp_Object value,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 void *charset_list_closure)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 struct charset_list_closure *chcl =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 (struct charset_list_closure*) charset_list_closure;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 Lisp_Object *charset_list = chcl->charset_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 *charset_list = Fcons (XCHARSET_NAME (value), *charset_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 DEFUN ("charset-list", Fcharset_list, 0, 0, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 Return a list of the names of all defined charsets.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 Lisp_Object charset_list = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 struct gcpro gcpro1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 struct charset_list_closure charset_list_closure;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 GCPRO1 (charset_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 charset_list_closure.charset_list = &charset_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 elisp_maphash (add_charset_to_list_mapper, Vcharset_hash_table,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 &charset_list_closure);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 return charset_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 DEFUN ("charset-name", Fcharset_name, 1, 1, 0, /*
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
614 Return the name of charset CHARSET.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 (charset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 return XCHARSET_NAME (Fget_charset (charset));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
621 /* #### SJT Should generic properties be allowed? */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 DEFUN ("make-charset", Fmake_charset, 3, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 Define a new character set.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 This function is for use with Mule support.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 NAME is a symbol, the name by which the character set is normally referred.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 DOC-STRING is a string describing the character set.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 PROPS is a property list, describing the specific nature of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 character set. Recognized properties are:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 'short-name Short version of the charset name (ex: Latin-1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 'long-name Long version of the charset name (ex: ISO8859-1 (Latin-1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 'registry A regular expression matching the font registry field for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 this character set.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 'dimension Number of octets used to index a character in this charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 Either 1 or 2. Defaults to 1.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 'columns Number of columns used to display a character in this charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 Only used in TTY mode. (Under X, the actual width of a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 character can be derived from the font used to display the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 characters.) If unspecified, defaults to the dimension
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 (this is almost always the correct value).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 'chars Number of characters in each dimension (94 or 96).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 Defaults to 94. Note that if the dimension is 2, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 character set thus described is 94x94 or 96x96.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 'final Final byte of ISO 2022 escape sequence. Must be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 supplied. Each combination of (DIMENSION, CHARS) defines a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 separate namespace for final bytes. Note that ISO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 2022 restricts the final byte to the range
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 0x30 - 0x7E if dimension == 1, and 0x30 - 0x5F if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 dimension == 2. Note also that final bytes in the range
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 0x30 - 0x3F are reserved for user-defined (not official)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 character sets.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 'graphic 0 (use left half of font on output) or 1 (use right half
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 of font on output). Defaults to 0. For example, for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 a font whose registry is ISO8859-1, the left half
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 (octets 0x20 - 0x7F) is the `ascii' character set, while
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 the right half (octets 0xA0 - 0xFF) is the `latin-1'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 character set. With 'graphic set to 0, the octets
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 will have their high bit cleared; with it set to 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 the octets will have their high bit set.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 'direction 'l2r (left-to-right) or 'r2l (right-to-left).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 Defaults to 'l2r.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 'ccl-program A compiled CCL program used to convert a character in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 this charset into an index into the font. This is in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 addition to the 'graphic property. The CCL program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 is passed the octets of the character, with the high
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 bit cleared and set depending upon whether the value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 of the 'graphic property is 0 or 1.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 (name, doc_string, props))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 int id, dimension = 1, chars = 94, graphic = 0, final = 0, columns = -1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 int direction = CHARSET_LEFT_TO_RIGHT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 int type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 Lisp_Object registry = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 Lisp_Object charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 Lisp_Object ccl_program = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 Lisp_Object short_name = Qnil, long_name = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 CHECK_SYMBOL (name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 if (!NILP (doc_string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 CHECK_STRING (doc_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 charset = Ffind_charset (name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 if (!NILP (charset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 signal_simple_error ("Cannot redefine existing charset", name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
687 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
688 EXTERNAL_PROPERTY_LIST_LOOP_3 (keyword, value, props)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
689 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
690 if (EQ (keyword, Qshort_name))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
691 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
692 CHECK_STRING (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
693 short_name = value;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
694 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
696 if (EQ (keyword, Qlong_name))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
697 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
698 CHECK_STRING (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
699 long_name = value;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
700 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
702 else if (EQ (keyword, Qdimension))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
703 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
704 CHECK_INT (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
705 dimension = XINT (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
706 if (dimension < 1 || dimension > 2)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
707 signal_simple_error ("Invalid value for 'dimension", value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
708 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
710 else if (EQ (keyword, Qchars))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
711 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
712 CHECK_INT (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
713 chars = XINT (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
714 if (chars != 94 && chars != 96)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
715 signal_simple_error ("Invalid value for 'chars", value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
716 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
718 else if (EQ (keyword, Qcolumns))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
719 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
720 CHECK_INT (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
721 columns = XINT (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
722 if (columns != 1 && columns != 2)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
723 signal_simple_error ("Invalid value for 'columns", value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
724 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
726 else if (EQ (keyword, Qgraphic))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
727 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
728 CHECK_INT (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
729 graphic = XINT (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
730 if (graphic < 0 || graphic > 1)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
731 signal_simple_error ("Invalid value for 'graphic", value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
732 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
734 else if (EQ (keyword, Qregistry))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
735 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
736 CHECK_STRING (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
737 registry = value;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
738 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
740 else if (EQ (keyword, Qdirection))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
741 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
742 if (EQ (value, Ql2r))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
743 direction = CHARSET_LEFT_TO_RIGHT;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
744 else if (EQ (value, Qr2l))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
745 direction = CHARSET_RIGHT_TO_LEFT;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
746 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
747 signal_simple_error ("Invalid value for 'direction", value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
748 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
750 else if (EQ (keyword, Qfinal))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
751 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
752 CHECK_CHAR_COERCE_INT (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
753 final = XCHAR (value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
754 if (final < '0' || final > '~')
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
755 signal_simple_error ("Invalid value for 'final", value);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
756 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
758 else if (EQ (keyword, Qccl_program))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
759 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
760 struct ccl_program test_ccl;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
761
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
762 if (setup_ccl_program (&test_ccl, value) < 0)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
763 signal_simple_error ("Invalid value for 'ccl-program", value);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
764 ccl_program = value;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
765 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
767 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
768 signal_simple_error ("Unrecognized property", keyword);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
769 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
770 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 if (!final)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 error ("'final must be specified");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 if (dimension == 2 && final > 0x5F)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 signal_simple_error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 ("Final must be in the range 0x30 - 0x5F for dimension == 2",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 make_char (final));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 if (dimension == 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 type = (chars == 94) ? CHARSET_TYPE_94 : CHARSET_TYPE_96;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 type = (chars == 94) ? CHARSET_TYPE_94X94 : CHARSET_TYPE_96X96;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 if (!NILP (CHARSET_BY_ATTRIBUTES (type, final, CHARSET_LEFT_TO_RIGHT)) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 !NILP (CHARSET_BY_ATTRIBUTES (type, final, CHARSET_RIGHT_TO_LEFT)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 ("Character set already defined for this DIMENSION/CHARS/FINAL combo");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
789 id = get_unallocated_leading_byte (dimension);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 if (NILP (doc_string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792 doc_string = build_string ("");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
793
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 if (NILP (registry))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 registry = build_string ("");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 if (NILP (short_name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 XSETSTRING (short_name, XSYMBOL (name)->name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 if (NILP (long_name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 long_name = doc_string;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 if (columns == -1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804 columns = dimension;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 charset = make_charset (id, name, dimension + 2, type, columns, graphic,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 final, direction, short_name, long_name, doc_string, registry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 if (!NILP (ccl_program))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 XCHARSET_CCL_PROGRAM (charset) = ccl_program;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 return charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 DEFUN ("make-reverse-direction-charset", Fmake_reverse_direction_charset,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 2, 2, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 Make a charset equivalent to CHARSET but which goes in the opposite direction.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 NEW-NAME is the name of the new charset. Return the new charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 (charset, new_name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 Lisp_Object new_charset = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 int id, dimension, columns, graphic, final;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 int direction, type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 Lisp_Object registry, doc_string, short_name, long_name;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
823 Lisp_Charset *cs;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 charset = Fget_charset (charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 if (!NILP (XCHARSET_REVERSE_DIRECTION_CHARSET (charset)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 signal_simple_error ("Charset already has reverse-direction charset",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 CHECK_SYMBOL (new_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 if (!NILP (Ffind_charset (new_name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 signal_simple_error ("Cannot redefine existing charset", new_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 cs = XCHARSET (charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 type = CHARSET_TYPE (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 columns = CHARSET_COLUMNS (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 dimension = CHARSET_DIMENSION (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 id = get_unallocated_leading_byte (dimension);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 graphic = CHARSET_GRAPHIC (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 final = CHARSET_FINAL (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 direction = CHARSET_RIGHT_TO_LEFT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 if (CHARSET_DIRECTION (cs) == CHARSET_RIGHT_TO_LEFT)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 direction = CHARSET_LEFT_TO_RIGHT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 doc_string = CHARSET_DOC_STRING (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847 short_name = CHARSET_SHORT_NAME (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
848 long_name = CHARSET_LONG_NAME (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
849 registry = CHARSET_REGISTRY (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
850
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
851 new_charset = make_charset (id, new_name, dimension + 2, type, columns,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
852 graphic, final, direction, short_name, long_name,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 doc_string, registry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 CHARSET_REVERSE_DIRECTION_CHARSET (cs) = new_charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
856 XCHARSET_REVERSE_DIRECTION_CHARSET (new_charset) = charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
857
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 return new_charset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 /* #### Reverse direction charsets not yet implemented. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 #if 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
863 DEFUN ("charset-reverse-direction-charset", Fcharset_reverse_direction_charset,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
864 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 Return the reverse-direction charset parallel to CHARSET, if any.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866 This is the charset with the same properties (in particular, the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 dimension, number of characters per dimension, and final byte) as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 CHARSET but whose characters are displayed in the opposite direction.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 (charset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 charset = Fget_charset (charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 return XCHARSET_REVERSE_DIRECTION_CHARSET (charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
877 DEFUN ("charset-from-attributes", Fcharset_from_attributes, 3, 4, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
878 Return a charset with the given DIMENSION, CHARS, FINAL, and DIRECTION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
879 If DIRECTION is omitted, both directions will be checked (left-to-right
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
880 will be returned if character sets exist for both directions).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
881 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 (dimension, chars, final, direction))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 int dm, ch, fi, di = -1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 int type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 Lisp_Object obj = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 CHECK_INT (dimension);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 dm = XINT (dimension);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 if (dm < 1 || dm > 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 signal_simple_error ("Invalid value for DIMENSION", dimension);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 CHECK_INT (chars);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894 ch = XINT (chars);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 if (ch != 94 && ch != 96)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
896 signal_simple_error ("Invalid value for CHARS", chars);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 CHECK_CHAR_COERCE_INT (final);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 fi = XCHAR (final);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 if (fi < '0' || fi > '~')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 signal_simple_error ("Invalid value for FINAL", final);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 if (EQ (direction, Ql2r))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 di = CHARSET_LEFT_TO_RIGHT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 else if (EQ (direction, Qr2l))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 di = CHARSET_RIGHT_TO_LEFT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 else if (!NILP (direction))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 signal_simple_error ("Invalid value for DIRECTION", direction);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 if (dm == 2 && fi > 0x5F)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 signal_simple_error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 ("Final must be in the range 0x30 - 0x5F for dimension == 2", final);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
914 if (dm == 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
915 type = (ch == 94) ? CHARSET_TYPE_94 : CHARSET_TYPE_96;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
916 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
917 type = (ch == 94) ? CHARSET_TYPE_94X94 : CHARSET_TYPE_96X96;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
918
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
919 if (di == -1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
920 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
921 obj = CHARSET_BY_ATTRIBUTES (type, fi, CHARSET_LEFT_TO_RIGHT);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
922 if (NILP (obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
923 obj = CHARSET_BY_ATTRIBUTES (type, fi, CHARSET_RIGHT_TO_LEFT);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
924 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
925 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
926 obj = CHARSET_BY_ATTRIBUTES (type, fi, di);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
927
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
928 if (CHARSETP (obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
929 return XCHARSET_NAME (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
930 return obj;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
933 DEFUN ("charset-short-name", Fcharset_short_name, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
934 Return short name of CHARSET.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
935 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
936 (charset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
937 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 return XCHARSET_SHORT_NAME (Fget_charset (charset));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
940
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
941 DEFUN ("charset-long-name", Fcharset_long_name, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
942 Return long name of CHARSET.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
943 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
944 (charset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
945 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
946 return XCHARSET_LONG_NAME (Fget_charset (charset));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
947 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
948
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
949 DEFUN ("charset-description", Fcharset_description, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
950 Return description of CHARSET.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
951 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
952 (charset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 return XCHARSET_DOC_STRING (Fget_charset (charset));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957 DEFUN ("charset-dimension", Fcharset_dimension, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 Return dimension of CHARSET.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
960 (charset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
961 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 return make_int (XCHARSET_DIMENSION (Fget_charset (charset)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
964
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
965 DEFUN ("charset-property", Fcharset_property, 2, 2, 0, /*
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
966 Return property PROP of CHARSET, a charset object or symbol naming a charset.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
967 Recognized properties are those listed in `make-charset', as well as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
968 'name and 'doc-string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
969 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
970 (charset, prop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
971 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
972 Lisp_Charset *cs;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 charset = Fget_charset (charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
975 cs = XCHARSET (charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
976
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
977 CHECK_SYMBOL (prop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
978 if (EQ (prop, Qname)) return CHARSET_NAME (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
979 if (EQ (prop, Qshort_name)) return CHARSET_SHORT_NAME (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
980 if (EQ (prop, Qlong_name)) return CHARSET_LONG_NAME (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
981 if (EQ (prop, Qdoc_string)) return CHARSET_DOC_STRING (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 if (EQ (prop, Qdimension)) return make_int (CHARSET_DIMENSION (cs));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 if (EQ (prop, Qcolumns)) return make_int (CHARSET_COLUMNS (cs));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
984 if (EQ (prop, Qgraphic)) return make_int (CHARSET_GRAPHIC (cs));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 if (EQ (prop, Qfinal)) return make_char (CHARSET_FINAL (cs));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
986 if (EQ (prop, Qchars)) return make_int (CHARSET_CHARS (cs));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
987 if (EQ (prop, Qregistry)) return CHARSET_REGISTRY (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
988 if (EQ (prop, Qccl_program)) return CHARSET_CCL_PROGRAM (cs);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
989 if (EQ (prop, Qdirection))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 return CHARSET_DIRECTION (cs) == CHARSET_LEFT_TO_RIGHT ? Ql2r : Qr2l;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
991 if (EQ (prop, Qreverse_direction_charset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
993 Lisp_Object obj = CHARSET_REVERSE_DIRECTION_CHARSET (cs);
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
994 /* #### Is this translation OK? If so, error checking sufficient? */
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
995 return CHARSETP (obj) ? XCHARSET_NAME (obj) : obj;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
996 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
997 signal_simple_error ("Unrecognized charset property name", prop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
998 return Qnil; /* not reached */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
999 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 DEFUN ("charset-id", Fcharset_id, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002 Return charset identification number of CHARSET.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1003 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1004 (charset))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1005 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1006 return make_int(XCHARSET_LEADING_BYTE (Fget_charset (charset)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1007 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1008
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 /* #### We need to figure out which properties we really want to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1010 allow to be set. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1011
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 DEFUN ("set-charset-ccl-program", Fset_charset_ccl_program, 2, 2, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 Set the 'ccl-program property of CHARSET to CCL-PROGRAM.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1015 (charset, ccl_program))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1017 struct ccl_program test_ccl;
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1018
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1019 charset = Fget_charset (charset);
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1020 if (setup_ccl_program (&test_ccl, ccl_program) < 0)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1021 signal_simple_error ("Invalid ccl-program", ccl_program);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022 XCHARSET_CCL_PROGRAM (charset) = ccl_program;
510
5bdbc721d46a [xemacs-hg @ 2001-05-06 08:33:35 by ben]
ben
parents: 452
diff changeset
1023 face_property_was_changed (Vdefault_face, Qfont, Qglobal);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 invalidate_charset_font_caches (Lisp_Object charset)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 /* Invalidate font cache entries for charset on all devices. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 Lisp_Object devcons, concons, hash_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 DEVICE_LOOP_NO_BREAK (devcons, concons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 struct device *d = XDEVICE (XCAR (devcons));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 hash_table = Fgethash (charset, d->charset_font_cache, Qunbound);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 if (!UNBOUNDP (hash_table))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 Fclrhash (hash_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 /* Japanese folks may want to (set-charset-registry 'ascii "jisx0201") */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 DEFUN ("set-charset-registry", Fset_charset_registry, 2, 2, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 Set the 'registry property of CHARSET to REGISTRY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 (charset, registry))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 charset = Fget_charset (charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 CHECK_STRING (registry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049 XCHARSET_REGISTRY (charset) = registry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 invalidate_charset_font_caches (charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 face_property_was_changed (Vdefault_face, Qfont, Qglobal);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 /* Lisp primitives for working with characters */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 DEFUN ("make-char", Fmake_char, 2, 3, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 Make a character from CHARSET and octets ARG1 and ARG2.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 ARG2 is required only for characters from two-dimensional charsets.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 For example, (make-char 'latin-iso8859-2 185) will return the Latin 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 character s with caron.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 (charset, arg1, arg2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
1068 Lisp_Charset *cs;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 int a1, a2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 int lowlim, highlim;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 charset = Fget_charset (charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 cs = XCHARSET (charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 if (EQ (charset, Vcharset_ascii)) lowlim = 0, highlim = 127;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 else if (EQ (charset, Vcharset_control_1)) lowlim = 0, highlim = 31;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 else if (CHARSET_CHARS (cs) == 94) lowlim = 33, highlim = 126;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1078 else /* CHARSET_CHARS (cs) == 96) */ lowlim = 32, highlim = 127;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1079
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 CHECK_INT (arg1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 /* It is useful (and safe, according to Olivier Galibert) to strip
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1082 the 8th bit off ARG1 and ARG2 because it allows programmers to
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 write (make-char 'latin-iso8859-2 CODE) where code is the actual
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 Latin 2 code of the character. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 a1 = XINT (arg1) & 0x7f;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 if (a1 < lowlim || a1 > highlim)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 args_out_of_range_3 (arg1, make_int (lowlim), make_int (highlim));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1089 if (CHARSET_DIMENSION (cs) == 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 if (!NILP (arg2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 signal_simple_error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 ("Charset is of dimension one; second octet must be nil", arg2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 return make_char (MAKE_CHAR (charset, a1, 0));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 CHECK_INT (arg2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 a2 = XINT (arg2) & 0x7f;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1099 if (a2 < lowlim || a2 > highlim)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1100 args_out_of_range_3 (arg2, make_int (lowlim), make_int (highlim));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102 return make_char (MAKE_CHAR (charset, a1, a2));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1105 DEFUN ("char-charset", Fchar_charset, 1, 1, 0, /*
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1106 Return the character set of CHARACTER.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 */
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1108 (character))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 {
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1110 CHECK_CHAR_COERCE_INT (character);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 return XCHARSET_NAME (CHARSET_BY_LEADING_BYTE
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1113 (CHAR_LEADING_BYTE (XCHAR (character))));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1116 DEFUN ("char-octet", Fchar_octet, 1, 2, 0, /*
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1117 Return the octet numbered N (should be 0 or 1) of CHARACTER.
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1118 N defaults to 0 if omitted.
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1119 */
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1120 (character, n))
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1121 {
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1122 Lisp_Object charset;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1123 int octet0, octet1;
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1124
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1125 CHECK_CHAR_COERCE_INT (character);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1126
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1127 BREAKUP_CHAR (XCHAR (character), charset, octet0, octet1);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1128
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1129 if (NILP (n) || EQ (n, Qzero))
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1130 return make_int (octet0);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1131 else if (EQ (n, make_int (1)))
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1132 return make_int (octet1);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1133 else
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1134 signal_simple_error ("Octet number must be 0 or 1", n);
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1135 }
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1136
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 DEFUN ("split-char", Fsplit_char, 1, 1, 0, /*
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1138 Return list of charset and one or two position-codes of CHARACTER.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 (character))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 struct gcpro gcpro1, gcpro2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144 Lisp_Object charset = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 Lisp_Object rc = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 int c1, c2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 GCPRO2 (charset, rc);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 CHECK_CHAR_COERCE_INT (character);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 BREAKUP_CHAR (XCHAR (character), charset, c1, c2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 if (XCHARSET_DIMENSION (Fget_charset (charset)) == 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 rc = list3 (XCHARSET_NAME (charset), make_int (c1), make_int (c2));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 rc = list2 (XCHARSET_NAME (charset), make_int (c1));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 return rc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 #ifdef ENABLE_COMPOSITE_CHARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 /* composite character functions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 Emchar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 lookup_composite_char (Bufbyte *str, int len)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 Lisp_Object lispstr = make_string (str, len);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 Lisp_Object ch = Fgethash (lispstr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 Vcomposite_char_string2char_hash_table,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 Qunbound);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 Emchar emch;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 if (UNBOUNDP (ch))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183 if (composite_char_row_next >= 128)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 signal_simple_error ("No more composite chars available", lispstr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 emch = MAKE_CHAR (Vcharset_composite, composite_char_row_next,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 composite_char_col_next);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 Fputhash (make_char (emch), lispstr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 Vcomposite_char_char2string_hash_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1189 Fputhash (lispstr, make_char (emch),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 Vcomposite_char_string2char_hash_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 composite_char_col_next++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 if (composite_char_col_next >= 128)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1194 composite_char_col_next = 32;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1195 composite_char_row_next++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1196 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1197 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1198 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1199 emch = XCHAR (ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1200 return emch;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1201 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1202
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1203 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1204 composite_char_string (Emchar ch)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206 Lisp_Object str = Fgethash (make_char (ch),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 Vcomposite_char_char2string_hash_table,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 Qunbound);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 assert (!UNBOUNDP (str));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1210 return str;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 xxDEFUN ("make-composite-char", Fmake_composite_char, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 Convert a string into a single composite character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215 The character is the result of overstriking all the characters in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216 the string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 (string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 CHECK_STRING (string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221 return make_char (lookup_composite_char (XSTRING_DATA (string),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 XSTRING_LENGTH (string)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 xxDEFUN ("composite-char-string", Fcomposite_char_string, 1, 1, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 Return a string of the characters comprising a composite character.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 (ch))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 Emchar emch;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232 CHECK_CHAR (ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233 emch = XCHAR (ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 if (CHAR_LEADING_BYTE (emch) != LEADING_BYTE_COMPOSITE)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 signal_simple_error ("Must be composite char", ch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236 return composite_char_string (emch);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238 #endif /* ENABLE_COMPOSITE_CHARS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 /* initialization */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 syms_of_mule_charset (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1248 INIT_LRECORD_IMPLEMENTATION (charset);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1249
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 DEFSUBR (Fcharsetp);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251 DEFSUBR (Ffind_charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 DEFSUBR (Fget_charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 DEFSUBR (Fcharset_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254 DEFSUBR (Fcharset_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 DEFSUBR (Fmake_charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 DEFSUBR (Fmake_reverse_direction_charset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257 /* DEFSUBR (Freverse_direction_charset); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 DEFSUBR (Fcharset_from_attributes);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1259 DEFSUBR (Fcharset_short_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260 DEFSUBR (Fcharset_long_name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261 DEFSUBR (Fcharset_description);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 DEFSUBR (Fcharset_dimension);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263 DEFSUBR (Fcharset_property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1264 DEFSUBR (Fcharset_id);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1265 DEFSUBR (Fset_charset_ccl_program);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266 DEFSUBR (Fset_charset_registry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1268 DEFSUBR (Fmake_char);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 DEFSUBR (Fchar_charset);
438
84b14dcb0985 Import from CVS: tag r21-2-27
cvs
parents: 428
diff changeset
1270 DEFSUBR (Fchar_octet);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271 DEFSUBR (Fsplit_char);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273 #ifdef ENABLE_COMPOSITE_CHARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1274 DEFSUBR (Fmake_composite_char);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1275 DEFSUBR (Fcomposite_char_string);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1276 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1277
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1278 defsymbol (&Qcharsetp, "charsetp");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1279 defsymbol (&Qregistry, "registry");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1280 defsymbol (&Qfinal, "final");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1281 defsymbol (&Qgraphic, "graphic");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1282 defsymbol (&Qdirection, "direction");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1283 defsymbol (&Qreverse_direction_charset, "reverse-direction-charset");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1284 defsymbol (&Qshort_name, "short-name");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1285 defsymbol (&Qlong_name, "long-name");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1286
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1287 defsymbol (&Ql2r, "l2r");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1288 defsymbol (&Qr2l, "r2l");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1289
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1290 /* Charsets, compatible with FSF 20.3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1291 Naming convention is Script-Charset[-Edition] */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1292 defsymbol (&Qascii, "ascii");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1293 defsymbol (&Qcontrol_1, "control-1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1294 defsymbol (&Qlatin_iso8859_1, "latin-iso8859-1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1295 defsymbol (&Qlatin_iso8859_2, "latin-iso8859-2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1296 defsymbol (&Qlatin_iso8859_3, "latin-iso8859-3");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1297 defsymbol (&Qlatin_iso8859_4, "latin-iso8859-4");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1298 defsymbol (&Qthai_tis620, "thai-tis620");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1299 defsymbol (&Qgreek_iso8859_7, "greek-iso8859-7");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1300 defsymbol (&Qarabic_iso8859_6, "arabic-iso8859-6");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1301 defsymbol (&Qhebrew_iso8859_8, "hebrew-iso8859-8");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1302 defsymbol (&Qkatakana_jisx0201, "katakana-jisx0201");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1303 defsymbol (&Qlatin_jisx0201, "latin-jisx0201");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1304 defsymbol (&Qcyrillic_iso8859_5, "cyrillic-iso8859-5");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1305 defsymbol (&Qlatin_iso8859_9, "latin-iso8859-9");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1306 defsymbol (&Qjapanese_jisx0208_1978, "japanese-jisx0208-1978");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1307 defsymbol (&Qchinese_gb2312, "chinese-gb2312");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1308 defsymbol (&Qjapanese_jisx0208, "japanese-jisx0208");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1309 defsymbol (&Qkorean_ksc5601, "korean-ksc5601");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1310 defsymbol (&Qjapanese_jisx0212, "japanese-jisx0212");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1311 defsymbol (&Qchinese_cns11643_1, "chinese-cns11643-1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1312 defsymbol (&Qchinese_cns11643_2, "chinese-cns11643-2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1313 defsymbol (&Qchinese_big5_1, "chinese-big5-1");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1314 defsymbol (&Qchinese_big5_2, "chinese-big5-2");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1316 defsymbol (&Qcomposite, "composite");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1317 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1318
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1319 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1320 vars_of_mule_charset (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1321 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1322 int i, j, k;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1323
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
1324 chlook = xnew_and_zero (struct charset_lookup); /* zero for Purify. */
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
1325 dump_add_root_struct_ptr (&chlook, &charset_lookup_description);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1327 /* Table of charsets indexed by leading byte. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1328 for (i = 0; i < countof (chlook->charset_by_leading_byte); i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1329 chlook->charset_by_leading_byte[i] = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1330
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1331 /* Table of charsets indexed by type/final-byte/direction. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1332 for (i = 0; i < countof (chlook->charset_by_attributes); i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1333 for (j = 0; j < countof (chlook->charset_by_attributes[0]); j++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1334 for (k = 0; k < countof (chlook->charset_by_attributes[0][0]); k++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1335 chlook->charset_by_attributes[i][j][k] = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1336
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1337 chlook->next_allocated_1_byte_leading_byte = MIN_LEADING_BYTE_PRIVATE_1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1338 chlook->next_allocated_2_byte_leading_byte = MIN_LEADING_BYTE_PRIVATE_2;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1339 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1340
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1341 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1342 complex_vars_of_mule_charset (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1343 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1344 staticpro (&Vcharset_hash_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1345 Vcharset_hash_table =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1346 make_lisp_hash_table (50, HASH_TABLE_NON_WEAK, HASH_TABLE_EQ);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1348 /* Predefined character sets. We store them into variables for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1349 ease of access. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1350
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1351 staticpro (&Vcharset_ascii);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1352 Vcharset_ascii =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1353 make_charset (LEADING_BYTE_ASCII, Qascii, 1,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1354 CHARSET_TYPE_94, 1, 0, 'B',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1355 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1356 build_string ("ASCII"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1357 build_string ("ASCII)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1358 build_string ("ASCII (ISO646 IRV)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1359 build_string ("\\(iso8859-[0-9]*\\|-ascii\\)"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1360 staticpro (&Vcharset_control_1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1361 Vcharset_control_1 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1362 make_charset (LEADING_BYTE_CONTROL_1, Qcontrol_1, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1363 CHARSET_TYPE_94, 1, 1, 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1364 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365 build_string ("C1"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366 build_string ("Control characters"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367 build_string ("Control characters 128-191"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1368 build_string (""));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1369 staticpro (&Vcharset_latin_iso8859_1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1370 Vcharset_latin_iso8859_1 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1371 make_charset (LEADING_BYTE_LATIN_ISO8859_1, Qlatin_iso8859_1, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372 CHARSET_TYPE_96, 1, 1, 'A',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374 build_string ("Latin-1"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375 build_string ("ISO8859-1 (Latin-1)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376 build_string ("ISO8859-1 (Latin-1)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377 build_string ("iso8859-1"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378 staticpro (&Vcharset_latin_iso8859_2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1379 Vcharset_latin_iso8859_2 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 make_charset (LEADING_BYTE_LATIN_ISO8859_2, Qlatin_iso8859_2, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381 CHARSET_TYPE_96, 1, 1, 'B',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383 build_string ("Latin-2"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384 build_string ("ISO8859-2 (Latin-2)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1385 build_string ("ISO8859-2 (Latin-2)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1386 build_string ("iso8859-2"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1387 staticpro (&Vcharset_latin_iso8859_3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388 Vcharset_latin_iso8859_3 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389 make_charset (LEADING_BYTE_LATIN_ISO8859_3, Qlatin_iso8859_3, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390 CHARSET_TYPE_96, 1, 1, 'C',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1392 build_string ("Latin-3"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1393 build_string ("ISO8859-3 (Latin-3)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394 build_string ("ISO8859-3 (Latin-3)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395 build_string ("iso8859-3"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 staticpro (&Vcharset_latin_iso8859_4);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397 Vcharset_latin_iso8859_4 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398 make_charset (LEADING_BYTE_LATIN_ISO8859_4, Qlatin_iso8859_4, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1399 CHARSET_TYPE_96, 1, 1, 'D',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1400 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1401 build_string ("Latin-4"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402 build_string ("ISO8859-4 (Latin-4)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403 build_string ("ISO8859-4 (Latin-4)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404 build_string ("iso8859-4"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1405 staticpro (&Vcharset_thai_tis620);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406 Vcharset_thai_tis620 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1407 make_charset (LEADING_BYTE_THAI_TIS620, Qthai_tis620, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408 CHARSET_TYPE_96, 1, 1, 'T',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410 build_string ("TIS620"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1411 build_string ("TIS620 (Thai)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412 build_string ("TIS620.2529 (Thai)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413 build_string ("tis620"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414 staticpro (&Vcharset_greek_iso8859_7);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415 Vcharset_greek_iso8859_7 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1416 make_charset (LEADING_BYTE_GREEK_ISO8859_7, Qgreek_iso8859_7, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417 CHARSET_TYPE_96, 1, 1, 'F',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1418 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1419 build_string ("ISO8859-7"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420 build_string ("ISO8859-7 (Greek)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1421 build_string ("ISO8859-7 (Greek)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1422 build_string ("iso8859-7"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1423 staticpro (&Vcharset_arabic_iso8859_6);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1424 Vcharset_arabic_iso8859_6 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1425 make_charset (LEADING_BYTE_ARABIC_ISO8859_6, Qarabic_iso8859_6, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426 CHARSET_TYPE_96, 1, 1, 'G',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1427 CHARSET_RIGHT_TO_LEFT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428 build_string ("ISO8859-6"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1429 build_string ("ISO8859-6 (Arabic)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1430 build_string ("ISO8859-6 (Arabic)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431 build_string ("iso8859-6"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1432 staticpro (&Vcharset_hebrew_iso8859_8);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433 Vcharset_hebrew_iso8859_8 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434 make_charset (LEADING_BYTE_HEBREW_ISO8859_8, Qhebrew_iso8859_8, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435 CHARSET_TYPE_96, 1, 1, 'H',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 CHARSET_RIGHT_TO_LEFT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1437 build_string ("ISO8859-8"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438 build_string ("ISO8859-8 (Hebrew)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1439 build_string ("ISO8859-8 (Hebrew)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 build_string ("iso8859-8"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441 staticpro (&Vcharset_katakana_jisx0201);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1442 Vcharset_katakana_jisx0201 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1443 make_charset (LEADING_BYTE_KATAKANA_JISX0201, Qkatakana_jisx0201, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 CHARSET_TYPE_94, 1, 1, 'I',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1446 build_string ("JISX0201 Kana"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447 build_string ("JISX0201.1976 (Japanese Kana)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448 build_string ("JISX0201.1976 Japanese Kana"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449 build_string ("jisx0201.1976"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1450 staticpro (&Vcharset_latin_jisx0201);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451 Vcharset_latin_jisx0201 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452 make_charset (LEADING_BYTE_LATIN_JISX0201, Qlatin_jisx0201, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453 CHARSET_TYPE_94, 1, 0, 'J',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455 build_string ("JISX0201 Roman"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456 build_string ("JISX0201.1976 (Japanese Roman)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457 build_string ("JISX0201.1976 Japanese Roman"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458 build_string ("jisx0201.1976"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459 staticpro (&Vcharset_cyrillic_iso8859_5);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460 Vcharset_cyrillic_iso8859_5 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461 make_charset (LEADING_BYTE_CYRILLIC_ISO8859_5, Qcyrillic_iso8859_5, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462 CHARSET_TYPE_96, 1, 1, 'L',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464 build_string ("ISO8859-5"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465 build_string ("ISO8859-5 (Cyrillic)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466 build_string ("ISO8859-5 (Cyrillic)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1467 build_string ("iso8859-5"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468 staticpro (&Vcharset_latin_iso8859_9);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469 Vcharset_latin_iso8859_9 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1470 make_charset (LEADING_BYTE_LATIN_ISO8859_9, Qlatin_iso8859_9, 2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471 CHARSET_TYPE_96, 1, 1, 'M',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 build_string ("Latin-5"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 build_string ("ISO8859-9 (Latin-5)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475 build_string ("ISO8859-9 (Latin-5)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 build_string ("iso8859-9"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477 staticpro (&Vcharset_japanese_jisx0208_1978);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1478 Vcharset_japanese_jisx0208_1978 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479 make_charset (LEADING_BYTE_JAPANESE_JISX0208_1978, Qjapanese_jisx0208_1978, 3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480 CHARSET_TYPE_94X94, 2, 0, '@',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482 build_string ("JISX0208.1978"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1483 build_string ("JISX0208.1978 (Japanese)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484 build_string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 ("JISX0208.1978 Japanese Kanji (so called \"old JIS\")"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 build_string ("\\(jisx0208\\|jisc6226\\)\\.1978"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 staticpro (&Vcharset_chinese_gb2312);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 Vcharset_chinese_gb2312 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 make_charset (LEADING_BYTE_CHINESE_GB2312, Qchinese_gb2312, 3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 CHARSET_TYPE_94X94, 2, 0, 'A',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 build_string ("GB2312"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 build_string ("GB2312)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 build_string ("GB2312 Chinese simplified"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495 build_string ("gb2312"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 staticpro (&Vcharset_japanese_jisx0208);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497 Vcharset_japanese_jisx0208 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498 make_charset (LEADING_BYTE_JAPANESE_JISX0208, Qjapanese_jisx0208, 3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 CHARSET_TYPE_94X94, 2, 0, 'B',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501 build_string ("JISX0208"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 build_string ("JISX0208.1983/1990 (Japanese)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 build_string ("JISX0208.1983/1990 Japanese Kanji"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 build_string ("jisx0208.19\\(83\\|90\\)"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 staticpro (&Vcharset_korean_ksc5601);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 Vcharset_korean_ksc5601 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507 make_charset (LEADING_BYTE_KOREAN_KSC5601, Qkorean_ksc5601, 3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 CHARSET_TYPE_94X94, 2, 0, 'C',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 build_string ("KSC5601"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 build_string ("KSC5601 (Korean"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512 build_string ("KSC5601 Korean Hangul and Hanja"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 build_string ("ksc5601"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 staticpro (&Vcharset_japanese_jisx0212);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1515 Vcharset_japanese_jisx0212 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1516 make_charset (LEADING_BYTE_JAPANESE_JISX0212, Qjapanese_jisx0212, 3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517 CHARSET_TYPE_94X94, 2, 0, 'D',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 build_string ("JISX0212"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1520 build_string ("JISX0212 (Japanese)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1521 build_string ("JISX0212 Japanese Supplement"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522 build_string ("jisx0212"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 #define CHINESE_CNS_PLANE_RE(n) "cns11643[.-]\\(.*[.-]\\)?" n "$"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 staticpro (&Vcharset_chinese_cns11643_1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 Vcharset_chinese_cns11643_1 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527 make_charset (LEADING_BYTE_CHINESE_CNS11643_1, Qchinese_cns11643_1, 3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 CHARSET_TYPE_94X94, 2, 0, 'G',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 build_string ("CNS11643-1"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 build_string ("CNS11643-1 (Chinese traditional)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 build_string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 ("CNS 11643 Plane 1 Chinese traditional"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 build_string (CHINESE_CNS_PLANE_RE("1")));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535 staticpro (&Vcharset_chinese_cns11643_2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 Vcharset_chinese_cns11643_2 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 make_charset (LEADING_BYTE_CHINESE_CNS11643_2, Qchinese_cns11643_2, 3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538 CHARSET_TYPE_94X94, 2, 0, 'H',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 build_string ("CNS11643-2"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 build_string ("CNS11643-2 (Chinese traditional)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 build_string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 ("CNS 11643 Plane 2 Chinese traditional"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 build_string (CHINESE_CNS_PLANE_RE("2")));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 staticpro (&Vcharset_chinese_big5_1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 Vcharset_chinese_big5_1 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 make_charset (LEADING_BYTE_CHINESE_BIG5_1, Qchinese_big5_1, 3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 CHARSET_TYPE_94X94, 2, 0, '0',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 build_string ("Big5"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 build_string ("Big5 (Level-1)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 build_string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 ("Big5 Level-1 Chinese traditional"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 build_string ("big5"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 staticpro (&Vcharset_chinese_big5_2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 Vcharset_chinese_big5_2 =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 make_charset (LEADING_BYTE_CHINESE_BIG5_2, Qchinese_big5_2, 3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 CHARSET_TYPE_94X94, 2, 0, '1',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 build_string ("Big5"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 build_string ("Big5 (Level-2)"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 build_string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 ("Big5 Level-2 Chinese traditional"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 build_string ("big5"));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567 #ifdef ENABLE_COMPOSITE_CHARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 /* #### For simplicity, we put composite chars into a 96x96 charset.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 This is going to lead to problems because you can run out of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 room, esp. as we don't yet recycle numbers. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 staticpro (&Vcharset_composite);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 Vcharset_composite =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 make_charset (LEADING_BYTE_COMPOSITE, Qcomposite, 3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 CHARSET_TYPE_96X96, 2, 0, 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 CHARSET_LEFT_TO_RIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 build_string ("Composite"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 build_string ("Composite characters"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 build_string ("Composite characters"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 build_string (""));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 /* #### not dumped properly */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 composite_char_row_next = 32;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 composite_char_col_next = 32;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 Vcomposite_char_string2char_hash_table =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 make_lisp_hash_table (500, HASH_TABLE_NON_WEAK, HASH_TABLE_EQUAL);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1587 Vcomposite_char_char2string_hash_table =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1588 make_lisp_hash_table (500, HASH_TABLE_NON_WEAK, HASH_TABLE_EQ);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1589 staticpro (&Vcomposite_char_string2char_hash_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1590 staticpro (&Vcomposite_char_char2string_hash_table);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1591 #endif /* ENABLE_COMPOSITE_CHARS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 }