Mercurial > emacs
annotate lisp/international/mule.el @ 18224:0e98af37970d
Comment change.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 12 Jun 1997 00:50:08 +0000 |
parents | 9650375d0a68 |
children | 3d036a21fc93 |
rev | line source |
---|---|
17052 | 1 ;;; mule.el --- basic commands for mulitilingual environment |
2 | |
3 ;; Copyright (C) 1995 Free Software Foundation, Inc. | |
4 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. | |
5 | |
6 ;; Keywords: mule, multilingual, character set, coding system | |
7 | |
8 ;; This file is part of GNU Emacs. | |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
11 ;; it under the terms of the GNU General Public License as published by | |
12 ;; the Free Software Foundation; either version 2, or (at your option) | |
13 ;; any later version. | |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
17071 | 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
23 ;; Boston, MA 02111-1307, USA. | |
17052 | 24 |
25 ;;; Code: | |
26 | |
27 (defconst mule-version "3.0 (MOMIJINOGA)" "\ | |
28 Version number and name of this version of MULE (multilingual environment).") | |
29 | |
30 (defconst mule-version-date "1998.1.1" "\ | |
31 Distribution date of this version of MULE (multilingual environment).") | |
32 | |
33 (defun load-with-code-conversion (fullname file &optional noerror nomessage) | |
34 "Execute a file of Lisp code named FILE whose absolute path is FULLNAME. | |
35 The FILE is decoded before evaluation if necessary. | |
36 If optional second arg NOERROR is non-nil, | |
37 report no error if FILE doesn't exist. | |
38 Print messages at start and end of loading unless | |
39 optional third arg NOMESSAGE is non-nil. | |
40 Return t if file exists." | |
41 (if (null (file-readable-p fullname)) | |
42 (and (null noerror) | |
43 (signal 'file-error (list "Cannot open load file" file))) | |
44 ;; Read file with code conversion, and then eval. | |
45 (let* ((buffer | |
46 ;; To avoid any autoloading, set default-major-mode to | |
47 ;; fundamental-mode. | |
48 (let ((default-major-mode 'fundamental-mode)) | |
49 ;; We can't use `generate-new-buffer' because files.el | |
50 ;; is not yet loaded. | |
51 (get-buffer-create (generate-new-buffer-name " *load*")))) | |
52 (load-in-progress t)) | |
53 (or nomessage (message "Loading %s..." file)) | |
54 (unwind-protect | |
55 (progn | |
56 (save-excursion | |
57 (set-buffer buffer) | |
58 (insert-file-contents fullname) | |
59 ;; We must set `buffer-file-name' for `eval-buffer' and | |
60 ;; `load-history'. | |
61 (setq buffer-file-name file) | |
62 ;; Make `kill-buffer' quiet. | |
63 (set-buffer-modified-p nil)) | |
64 ;; Eval in the original buffer. | |
65 (eval-buffer buffer)) | |
66 (kill-buffer buffer)) | |
67 (let ((hook (assoc file after-load-alist))) | |
68 (if hook | |
69 (mapcar (function eval) (cdr hook)))) | |
70 (or nomessage noninteractive | |
71 (message "Loading %s...done" file)) | |
72 t))) | |
73 | |
74 ;; API (Application Program Interface) for charsets. | |
75 | |
76 ;; Return t if OBJ is a quoted symbol. | |
77 (defsubst quoted-symbol-p (obj) | |
78 (and (listp obj) (eq (car obj) 'quote))) | |
79 | |
80 (defsubst charsetp (object) | |
81 "T is OBJECT is a charset." | |
82 (and (symbolp object) (vectorp (get object 'charset)))) | |
83 | |
84 (defsubst charset-info (charset) | |
85 "Return a vector of information of CHARSET. | |
86 The elements of the vector are: | |
87 CHARSET-ID, BYTES, DIMENSION, CHARS, WIDTH, DIRECTION, | |
88 LEADING-CODE-BASE, LEADING-CODE-EXT, | |
89 ISO-FINAL-CHAR, ISO-GRAPHIC-PLANE, | |
90 REVERSE-CHARSET, SHORT-NAME, LONG-NAME, DESCRIPTION, | |
91 PLIST, | |
92 where | |
93 CHARSET-ID (integer) is the identification number of the charset. | |
94 DIMENSION (integer) is the number of bytes to represent a character of | |
95 the charset: 1 or 2. | |
96 CHARS (integer) is the number of characters in a dimension: 94 or 96. | |
97 BYTE (integer) is the length of multi-byte form of a character in | |
98 the charset: one of 1, 2, 3, and 4. | |
99 WIDTH (integer) is the number of columns a character in the charset | |
100 occupies on the screen: one of 0, 1, and 2. | |
101 DIRECTION (integer) is the rendering direction of characters in the | |
102 charset when rendering. If 0, render from right to left, else | |
103 render from left to right. | |
104 LEADING-CODE-BASE (integer) is the base leading-code for the | |
105 charset. | |
106 LEADING-CODE-EXT (integer) is the extended leading-code for the | |
107 charset. All charsets of less than 0xA0 has the value 0. | |
108 ISO-FINAL-CHAR (character) is the final character of the | |
109 corresponding ISO 2022 charset. | |
110 ISO-GRAPHIC-PLANE (integer) is the graphic plane to be invoked | |
111 while encoding to variants of ISO 2022 coding system, one of the | |
112 following: 0/graphic-plane-left(GL), 1/graphic-plane-right(GR). | |
113 REVERSE-CHARSET (integer) is the charset which differs only in | |
114 LEFT-TO-RIGHT value from the charset. If there's no such a | |
115 charset, the value is -1. | |
116 SHORT-NAME (string) is the short name to refer to the charset. | |
117 LONG-NAME (string) is the long name to refer to the charset | |
118 DESCRIPTION (string) is the description string of the charset. | |
119 PLIST (property list) may contain any type of information a user | |
120 want to put and get by functions `put-charset-property' and | |
121 `get-charset-property' respectively." | |
122 (get charset 'charset)) | |
123 | |
124 (defmacro charset-id (charset) | |
125 "Return charset identification number of CHARSET." | |
126 (if (and (listp charset) (eq (car charset) 'quote)) | |
127 (aref (charset-info (nth 1 charset)) 0) | |
128 `(aref (charset-info ,charset) 0))) | |
129 | |
130 (defmacro charset-bytes (charset) | |
131 (if (quoted-symbol-p charset) | |
132 (aref (charset-info (nth 1 charset)) 1) | |
133 `(aref (charset-info ,charset) 1))) | |
134 | |
135 (defmacro charset-dimension (charset) | |
136 (if (quoted-symbol-p charset) | |
137 (aref (charset-info (nth 1 charset)) 2) | |
138 `(aref (charset-info ,charset) 2))) | |
139 | |
140 (defmacro charset-chars (charset) | |
141 (if (quoted-symbol-p charset) | |
142 (aref (charset-info (nth 1 charset)) 3) | |
143 `(aref (charset-info ,charset) 3))) | |
144 | |
145 (defmacro charset-width (charset) | |
146 (if (quoted-symbol-p charset) | |
147 (aref (charset-info (nth 1 charset)) 4) | |
148 `(aref (charset-info ,charset) 4))) | |
149 | |
150 (defmacro charset-direction (charset) | |
151 (if (quoted-symbol-p charset) | |
152 (aref (charset-info (nth 1 charset)) 5) | |
153 `(aref (charset-info ,charset) 5))) | |
154 | |
155 (defmacro charset-iso-final-char (charset) | |
156 (if (quoted-symbol-p charset) | |
157 (aref (charset-info (nth 1 charset)) 8) | |
158 `(aref (charset-info ,charset) 8))) | |
159 | |
160 (defmacro charset-iso-graphic-plane (charset) | |
161 (if (quoted-symbol-p charset) | |
162 (aref (charset-info (nth 1 charset)) 9) | |
163 `(aref (charset-info ,charset) 9))) | |
164 | |
165 (defmacro charset-reverse-charset (charset) | |
166 (if (quoted-symbol-p charset) | |
167 (aref (charset-info (nth 1 charset)) 10) | |
168 `(aref (charset-info ,charset) 10))) | |
169 | |
170 (defmacro charset-short-name (charset) | |
171 (if (quoted-symbol-p charset) | |
172 (aref (charset-info (nth 1 charset)) 11) | |
173 `(aref (charset-info ,charset) 11))) | |
174 | |
175 (defmacro charset-long-name (charset) | |
176 (if (quoted-symbol-p charset) | |
177 (aref (charset-info (nth 1 charset)) 12) | |
178 `(aref (charset-info ,charset) 12))) | |
179 | |
180 (defmacro charset-description (charset) | |
181 (if (quoted-symbol-p charset) | |
182 (aref (charset-info (nth 1 charset)) 13) | |
183 `(aref (charset-info ,charset) 13))) | |
184 | |
185 (defmacro charset-plist (charset) | |
186 (if (quoted-symbol-p charset) | |
17175 | 187 `(aref ,(charset-info (nth 1 charset)) 14) |
17052 | 188 `(aref (charset-info ,charset) 14))) |
189 | |
190 (defun set-charset-plist (charset plist) | |
191 (aset (charset-info charset) 14 plist)) | |
192 | |
193 (defmacro make-char (charset &optional c1 c2) | |
17175 | 194 "Return a character of CHARSET and position-codes CODE1 and CODE2. |
195 CODE1 and CODE2 are optional, but if you don't supply | |
196 sufficient position-codes, return a generic character which stands for | |
197 all characters or group of characters in the character sets. | |
17761
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
198 A generic character can be used to index a char table (e.g. syntax-table)." |
17052 | 199 (if (quoted-symbol-p charset) |
200 `(make-char-internal ,(charset-id (nth 1 charset)) ,c1 ,c2) | |
201 `(make-char-internal (charset-id ,charset) ,c1 ,c2))) | |
202 | |
17094
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
203 (defmacro charset-list () |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
204 "Return list of charsets ever defined." |
17837
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
205 'charset-list) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
206 |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
207 (defsubst generic-char-p (char) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
208 "Return t if and only if CHAR is a generic character. |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
209 See also the documentation of make-char." |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
210 (let ((l (split-char char))) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
211 (and (or (= (nth 1 l) 0) (eq (nth 2 l) 0)) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
212 (not (eq (car l) 'composition))))) |
17094
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
213 |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
214 ;; Coding system staffs |
17052 | 215 |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
216 ;; Coding system is a symbol that has the property `coding-system'. |
17052 | 217 ;; |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
218 ;; The value of the property `coding-system' is a vector of the |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
219 ;; following format: |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
220 ;; [TYPE MNEMONIC DOC-STRING NOT-USED-NOW FLAGS] |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
221 ;; We call this vector as coding-spec. See comments in src/coding.c |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
222 ;; for more detail. The property value may be another coding system, |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
223 ;; in which case, the coding-spec should be taken from that |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
224 ;; coding-system. The 4th element NOT-USED-NOW is kept just for |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
225 ;; backward compatibility with old version of Mule. |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
226 |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
227 (defconst coding-spec-type-idx 0) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
228 (defconst coding-spec-mnemonic-idx 1) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
229 (defconst coding-spec-doc-string-idx 2) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
230 (defconst coding-spec-flags-idx 4) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
231 |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
232 ;; Coding system may have proerpty `eol-type'. The value of the |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
233 ;; property `eol-type' is integer 0..2 or a vector of three coding |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
234 ;; systems. The integer value 0, 1, and 2 indicate the format of |
17052 | 235 ;; end-of-line LF, CRLF, and CR respectively. The vector value |
236 ;; indicates that the format of end-of-line should be detected | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
237 ;; automatically. Nth element of the vector is the subsidiary coding |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
238 ;; system whose `eol-type' property is N. |
17052 | 239 ;; |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
240 ;; Coding system may also have properties `post-read-conversion' and |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
241 ;; `pre-write-conversion. Values of these properties are functions. |
17052 | 242 ;; |
243 ;; The function in `post-read-conversion' is called after some text is | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
244 ;; inserted and decoded along the coding system and before any |
17052 | 245 ;; functions in `after-insert-functions' are called. The arguments to |
246 ;; this function is the same as those of a function in | |
247 ;; `after-insert-functions', i.e. LENGTH of a text while putting point | |
248 ;; at the head of the text to be decoded | |
249 ;; | |
250 ;; The function in `pre-write-conversion' is called after all | |
251 ;; functions in `write-region-annotate-functions' and | |
252 ;; `buffer-file-format' are called, and before the text is encoded by | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
253 ;; the coding system. The arguments to this function is the same as |
17052 | 254 ;; those of a function in `write-region-annotate-functions', i.e. FROM |
255 ;; and TO specifying region of a text. | |
256 | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
257 ;; Return Nth element of coding-spec of CODING-SYSTEM. |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
258 (defun coding-system-spec-ref (coding-system n) |
17094
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
259 (check-coding-system coding-system) |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
260 (let ((vec (coding-system-spec coding-system))) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
261 (and vec (aref vec n)))) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
262 |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
263 (defun coding-system-type (coding-system) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
264 "Return TYPE element in coding-spec of CODING-SYSTEM." |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
265 (coding-system-spec-ref coding-system coding-spec-type-idx)) |
17052 | 266 |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
267 (defun coding-system-mnemonic (coding-system) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
268 "Return MNEMONIC element in coding-spec of CODING-SYSTEM." |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
269 (or (coding-system-spec-ref coding-system coding-spec-mnemonic-idx) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
270 ?-)) |
17052 | 271 |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
272 (defun coding-system-doc-string (coding-system) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
273 "Return DOC-STRING element in coding-spec of CODING-SYSTEM." |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
274 (coding-system-spec-ref coding-system coding-spec-doc-string-idx)) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
275 |
17052 | 276 (defun coding-system-flags (coding-system) |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
277 "Return FLAGS element in coding-spec of CODING-SYSTEM." |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
278 (coding-system-spec-ref coding-system coding-spec-flags-idx)) |
17052 | 279 |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
280 (defun coding-system-eol-type (coding-system) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
281 "Return eol-type property of CODING-SYSTEM." |
17094
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
282 (check-coding-system coding-system) |
17052 | 283 (and coding-system |
284 (or (get coding-system 'eol-type) | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
285 (coding-system-eol-type (get coding-system 'coding-system))))) |
17052 | 286 |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
287 ;; Make subsidiear coding systems of CODING-SYSTEM whose base is BASE. |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
288 (defun make-subsidiary-coding-system (coding-system base) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
289 (let ((subsidiaries (vector (intern (format "%s-unix" coding-system)) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
290 (intern (format "%s-dos" coding-system)) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
291 (intern (format "%s-mac" coding-system)))) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
292 (i 0)) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
293 (while (< i 3) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
294 (put (aref subsidiaries i) 'coding-system base) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
295 (put (aref subsidiaries i) 'eol-type i) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
296 (put (aref subsidiaries i) 'eol-variant t) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
297 (setq i (1+ i))) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
298 subsidiaries)) |
17052 | 299 |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
300 (defun make-coding-system (coding-system type mnemonic doc-string |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
301 &optional flags) |
17052 | 302 "Define a new CODING-SYSTEM (symbol). |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
303 Remaining arguments are TYPE, MNEMONIC, DOC-STRING, and FLAGS (optional) which |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
304 construct a coding-spec of CODING-SYSTEM in the following format: |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
305 [TYPE MNEMONIC DOC-STRING nil FLAGS] |
17052 | 306 TYPE is an integer value indicating the type of coding-system as follows: |
307 0: Emacs internal format, | |
308 1: Shift-JIS (or MS-Kanji) used mainly on Japanese PC, | |
309 2: ISO-2022 including many variants, | |
310 3: Big5 used mainly on Chinese PC, | |
311 4: private, CCL programs provide encoding/decoding algorithm. | |
312 MNEMONIC is a character to be displayed on mode line for the coding-system. | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
313 DOC-STRING is a documentation string for the coding-system. |
17052 | 314 FLAGS specifies more precise information of each TYPE. |
315 If TYPE is 2 (ISO-2022), FLAGS should be a list of: | |
316 CHARSET0, CHARSET1, CHARSET2, CHARSET3, SHORT-FORM, | |
317 ASCII-EOL, ASCII-CNTL, SEVEN, LOCKING-SHIFT, SINGLE-SHIFT, | |
17761
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
318 USE-ROMAN, USE-OLDJIS, NO-ISO6429, INIT-BOL, DESIGNATION-BOL. |
17052 | 319 CHARSETn are character sets initially designated to Gn graphic registers. |
320 If CHARSETn is nil, Gn is never used. | |
321 If CHARSETn is t, Gn can be used but nothing designated initially. | |
322 If CHARSETn is a list of character sets, those character sets are | |
323 designated to Gn on output, but nothing designated to Gn initially. | |
324 SHORT-FORM non-nil means use short designation sequence on output. | |
325 ASCII-EOL non-nil means designate ASCII to g0 at end of line on output. | |
326 ASCII-CNTL non-nil means designate ASCII to g0 before control codes and | |
327 SPACE on output. | |
328 SEVEN non-nil means use 7-bit code only on output. | |
329 LOCKING-SHIFT non-nil means use locking-shift. | |
330 SINGLE-SHIFT non-nil means use single-shift. | |
331 USE-ROMAN non-nil means designate JIS0201-1976-Roman instead of ASCII. | |
332 USE-OLDJIS non-nil means designate JIS0208-1976 instead of JIS0208-1983. | |
333 NO-ISO6429 non-nil means not use ISO6429's direction specification. | |
17094
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
334 INIT-BOL non-nil means any designation state is assumed to be reset |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
335 to initial at each beginning of line on output. |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
336 DESIGNATION-BOL non-nil means designation sequences should be placed |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
337 at beginning of line on output. |
17052 | 338 If TYPE is 4 (private), FLAGS should be a cons of CCL programs, |
339 for encoding and decoding. See the documentation of CCL for more detail." | |
340 | |
341 ;; At first, set a value of `coding-system' property. | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
342 (let ((coding-spec (make-vector 5 nil))) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
343 (if (or (not (integerp type)) (< type 0) (> type 4)) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
344 (error "TYPE argument must be 0..4")) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
345 (if (or (not (integerp mnemonic)) (<= mnemonic ? ) (> mnemonic 127)) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
346 (error "MNEMONIC arguemnt must be a printable character.")) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
347 (aset coding-spec 0 type) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
348 (aset coding-spec 1 mnemonic) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
349 (aset coding-spec 2 (if (stringp doc-string) doc-string "")) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
350 (aset coding-spec 3 nil) ; obsolete element |
17052 | 351 (cond ((eq type 2) ; ISO2022 |
352 (let ((i 0) | |
353 (vec (make-vector 32 nil))) | |
354 (while (< i 4) | |
355 (let ((charset (car flags))) | |
17094
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
356 (or (not charset) (eq charset t) (charsetp charset) |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
357 (if (not (listp charset)) |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
358 (error "Invalid charset: %s" charset) |
17052 | 359 (let (elt l) |
360 (while charset | |
361 (setq elt (car charset)) | |
17094
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
362 (or (not elt) (eq elt t) (charsetp elt) |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
363 (error "Invalid charset: %s" elt)) |
17052 | 364 (setq l (cons elt l)) |
365 (setq charset (cdr charset))) | |
366 (setq charset (nreverse l))))) | |
367 (aset vec i charset)) | |
368 (setq flags (cdr flags) i (1+ i))) | |
369 (while (and (< i 32) flags) | |
370 (aset vec i (car flags)) | |
371 (setq flags (cdr flags) i (1+ i))) | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
372 (aset coding-spec 4 vec))) |
17052 | 373 ((eq type 4) ; private |
374 (if (and (consp flags) | |
375 (vectorp (car flags)) | |
376 (vectorp (cdr flags))) | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
377 (aset coding-spec 4 flags) |
17052 | 378 (error "Invalid FLAGS argument for TYPE 4 (CCL)"))) |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
379 (t (aset coding-spec 4 flags))) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
380 (put coding-system 'coding-system coding-spec)) |
17052 | 381 |
382 ;; Next, set a value of `eol-type' property. The value is a vector | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
383 ;; of subsidiary coding systems, each corresponds to a coding-system |
17052 | 384 ;; for the detected end-of-line format. |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
385 (put coding-system 'eol-type |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
386 (if (<= type 3) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
387 (make-subsidiary-coding-system coding-system coding-system) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
388 0))) |
17052 | 389 |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
390 (defun define-coding-system-alias (coding-system alias) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
391 "Define ALIAS as an alias coding system of CODING-SYSTEM." |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
392 (check-coding-system coding-system) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
393 (put alias 'coding-system coding-system) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
394 (if (vectorp (coding-system-eol-type coding-system)) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
395 (make-subsidiary-coding-system alias coding-system))) |
17052 | 396 |
397 (defun set-buffer-file-coding-system (coding-system &optional force) | |
398 "Set buffer-file-coding-system of the current buffer to CODING-SYSTEM. | |
399 If eol-type of the current buffer-file-coding-system is an integer value N, and | |
17761
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
400 eol-type of CODING-SYSTEM is a vector, the Nth element of the vector is used |
17052 | 401 instead of CODING-SYSTEM itself. |
402 Optional prefix argument FORCE non-nil means CODING-SYSTEM is set | |
403 regardless of eol-type of the current buffer-file-coding-system." | |
404 (interactive "zBuffer-file-coding-system: \nP") | |
405 (check-coding-system coding-system) | |
406 (if (null force) | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
407 (let ((x (coding-system-eol-type buffer-file-coding-system)) |
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
408 (y (coding-system-eol-type coding-system))) |
17052 | 409 (if (and (numberp x) (>= x 0) (<= x 2) (vectorp y)) |
410 (setq coding-system (aref y x))))) | |
411 (setq buffer-file-coding-system coding-system) | |
412 (set-buffer-modified-p t) | |
413 (force-mode-line-update)) | |
414 | |
17984
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
415 (defun set-terminal-coding-system (coding-system) |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
416 "Set coding system of your terminal to CODING-SYSTEM. |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
417 All outputs to terminal are encoded by the specified coding system." |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
418 (interactive "zCoding-system for terminal display: ") |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
419 (set-terminal-coding-system-internal coding-system) |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
420 (redraw-frame (selected-frame))) |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
421 |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
422 (defun set-keyboard-coding-system (coding-system) |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
423 "Set coding system of codes sent from terminal keyboard to CODING-SYSTEM. |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
424 In addition, this command toggles Encoded-kbd minor mode. |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
425 If the specified coding system is nil, Encoded-bkd mode is turned off, |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
426 else it is turned on so that user inputs are decoded by the |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
427 specified coding system." |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
428 (interactive "zCoding-system for keyboard input: ") |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
429 (set-keyboard-coding-system-internal coding-system) |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
430 (encoded-kbd-mode (if coding-system 1 0))) |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
431 |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
432 (defun set-buffer-process-coding-system (decoding encoding) |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
433 "Set coding systems to the process associated with the current buffer. |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
434 DECODING is the coding system to be used to decode input from the process, |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
435 ENCODING is to be used to encode output to the process." |
17052 | 436 (interactive |
437 "zCoding-system for process input: \nzCoding-system for process output: ") | |
438 (let ((proc (get-buffer-process (current-buffer)))) | |
439 (if (null proc) | |
440 (error "no process") | |
17984
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
441 (check-coding-system decoding) |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
442 (check-coding-system encoding) |
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
443 (set-process-coding-system proc decoding encoding))) |
17052 | 444 (force-mode-line-update)) |
445 | |
446 (defun set-coding-priority (arg) | |
447 "Set priority of coding-category according to LIST. | |
448 LIST is a list of coding-categories ordered by priority." | |
449 (let (l) | |
450 ;; Put coding-categories listed in ARG to L while checking the | |
451 ;; validity. We assume that `coding-category-list' contains whole | |
452 ;; coding-categories. | |
453 (while arg | |
454 (if (null (memq (car arg) coding-category-list)) | |
455 (error "Invalid element in argument: %s" (car arg))) | |
456 (setq l (cons (car arg) l)) | |
457 (setq arg (cdr arg))) | |
458 ;; Put coding-category not listed in ARG to L. | |
459 (while coding-category-list | |
460 (if (null (memq (car coding-category-list) l)) | |
461 (setq l (cons (car coding-category-list) l))) | |
462 (setq coding-category-list (cdr coding-category-list))) | |
463 ;; Update `coding-category-list' and return it. | |
464 (setq coding-category-list (nreverse l)))) | |
465 | |
466 ;;; FILE I/O | |
467 | |
468 ;; Set buffer-file-coding-system of the current buffer after some text | |
469 ;; is inserted. | |
470 (defun after-insert-file-set-buffer-file-coding-system (inserted) | |
471 (if last-coding-system-used | |
472 (let ((coding-system | |
473 (find-new-buffer-file-coding-system last-coding-system-used)) | |
474 (modified-p (buffer-modified-p))) | |
475 (if coding-system | |
476 (set-buffer-file-coding-system coding-system)) | |
477 (set-buffer-modified-p modified-p))) | |
478 nil) | |
479 | |
480 (setq after-insert-file-functions | |
481 (cons 'after-insert-file-set-buffer-file-coding-system | |
482 after-insert-file-functions)) | |
483 | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
484 ;; The coding-spec and eol-type of coding-system returned is decided |
17052 | 485 ;; independently in the following order. |
486 ;; 1. That of buffer-file-coding-system locally bound. | |
487 ;; 2. That of CODING. | |
488 | |
489 (defun find-new-buffer-file-coding-system (coding) | |
490 "Return a coding system for a buffer when a file of CODING is inserted. | |
17761
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
491 The local variable `buffer-file-coding-system' of the current buffer |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
492 is set to the returned value. |
17984
4882d58acf01
(set-terminal-coding-system): New function.
Kenichi Handa <handa@m17n.org>
parents:
17837
diff
changeset
|
493 Return nil if there's no need of setting new buffer-file-coding-system." |
17052 | 494 (let (local-coding local-eol |
495 found-eol | |
496 new-coding new-eol) | |
497 (if (null coding) | |
498 ;; Nothing found about coding. | |
499 nil | |
500 | |
501 ;; Get information of the current local value of | |
502 ;; `buffer-file-coding-system' in LOCAL-EOL and LOCAL-CODING. | |
503 (if (local-variable-p 'buffer-file-coding-system) | |
504 ;; Something already set locally. | |
505 (progn | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
506 (setq local-eol (coding-system-eol-type buffer-file-coding-system)) |
17052 | 507 (if (null (numberp local-eol)) |
508 ;; But eol-type is not yet set. | |
509 (setq local-eol nil)) | |
510 (if (null (eq (coding-system-type buffer-file-coding-system) t)) | |
17837
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
511 ;; This is not `undecided'. |
17052 | 512 (progn |
513 (setq local-coding buffer-file-coding-system) | |
514 (while (symbolp (get local-coding 'coding-system)) | |
515 (setq local-coding (get local-coding 'coding-system)))) | |
516 ))) | |
517 | |
518 (if (and local-eol local-coding) | |
519 ;; The current buffer has already set full coding-system, we | |
520 ;; had better not change it. | |
521 nil | |
522 | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
523 (setq found-eol (coding-system-eol-type coding)) |
17052 | 524 (if (null (numberp found-eol)) |
525 ;; But eol-type is not found. | |
526 (setq found-eol nil)) | |
527 (if (eq (coding-system-type coding) t) | |
17837
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
528 ;; This is `undecided', which means nothing found except |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
529 ;; for eol-type. |
17052 | 530 (setq coding nil)) |
531 | |
532 ;; The local setting takes precedence over the found one. | |
533 (setq new-coding (or local-coding coding)) | |
534 (setq new-eol (or local-eol found-eol)) | |
535 (if (and (numberp new-eol) | |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
536 (vectorp (coding-system-eol-type new-coding))) |
17052 | 537 (setq new-coding |
18195
9650375d0a68
Delete declaration for buffer-file-coding-system. It
Kenichi Handa <handa@m17n.org>
parents:
17984
diff
changeset
|
538 (aref (coding-system-eol-type new-coding) new-eol))) |
17052 | 539 new-coding)))) |
540 | |
17761
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
541 (defun make-unification-table (&rest args) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
542 "Make a unification table (char table) from arguments. |
17837
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
543 Each argument is a list of the form (FROM . TO), |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
544 where FROM is a character to be unified to TO. |
17761
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
545 |
17837
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
546 FROM can be a generic character (see make-char). In this case, TO is |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
547 a generic character containing the same number of charcters or a |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
548 oridinal character. If FROM and TO are both generic characters, all |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
549 characters belonging to FROM are unified to characters belonging to TO |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
550 without changing their position code(s)." |
17761
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
551 (let ((table (make-char-table 'character-unification-table)) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
552 revlist) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
553 (while args |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
554 (let ((elts (car args))) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
555 (while elts |
17837
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
556 (let* ((from (car (car elts))) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
557 (from-i 0) ; degree of freedom of FROM |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
558 (from-rev (nreverse (split-char from))) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
559 (to (cdr (car elts))) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
560 (to-i 0) ; degree of freedom of TO |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
561 (to-rev (nreverse (split-char to)))) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
562 ;; Check numbers of heading 0s in FROM-REV and TO-REV. |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
563 (while (eq (car from-rev) 0) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
564 (setq from-i (1+ from-i) from-rev (cdr from-rev))) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
565 (while (eq (car to-rev) 0) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
566 (setq to-i (1+ to-i) to-rev (cdr to-rev))) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
567 (if (and (/= from-i to-i) (/= to-i 0)) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
568 (error "Invalid character pair (%d . %d)" from to)) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
569 ;; If we have already unified TO to TO-ALT, FROM should |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
570 ;; also be unified to TO-ALT. But, this is only if TO is |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
571 ;; a generic character or TO-ALT is not a generic |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
572 ;; character. |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
573 (let ((to-alt (aref table to))) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
574 (if (and to-alt |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
575 (or (> to-i 0) (not (generic-char-p to-alt)))) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
576 (setq to to-alt))) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
577 (if (> from-i 0) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
578 (set-char-table-default table from to) |
a4d3078a83e9
(make-unification-table): Fix handling of a generic
Kenichi Handa <handa@m17n.org>
parents:
17761
diff
changeset
|
579 (aset table from to)) |
17761
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
580 ;; If we have already unified some chars to FROM, they |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
581 ;; should also be unified to TO. |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
582 (let ((l (assq from revlist))) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
583 (if l |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
584 (let ((ch (car l))) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
585 (setcar l to) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
586 (setq l (cdr l)) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
587 (while l |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
588 (aset table ch to) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
589 (setq l (cdr l)) )))) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
590 ;; Now update REVLIST. |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
591 (let ((l (assq to revlist))) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
592 (if l |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
593 (setcdr l (cons from (cdr l))) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
594 (setq revlist (cons (list to from) revlist))))) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
595 (setq elts (cdr elts)))) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
596 (setq args (cdr args))) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
597 ;; Return TABLE just created. |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
598 table)) |
c5f430853301
(make-char): Doc-string modified.
Kenichi Handa <handa@m17n.org>
parents:
17175
diff
changeset
|
599 |
17094
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
600 ;;; Initialize some variables. |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
601 |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
602 (put 'use-default-ascent 'char-table-extra-slots 0) |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
603 (setq use-default-ascent (make-char-table 'use-default-ascent)) |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
604 |
c237252970e5
(make-coding-system): For ISO-2022 type conding systems,
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
605 ;;; |
17052 | 606 (provide 'mule) |
607 | |
608 ;;; mule.el ends here |