Mercurial > hg > xemacs-beta
comparison lisp/mule/cyrillic.el @ 422:95016f13131a r21-2-19
Import from CVS: tag r21-2-19
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:25:01 +0200 |
parents | e804706bfb8c |
children |
comparison
equal
deleted
inserted
replaced
421:fff06e11db74 | 422:95016f13131a |
---|---|
1 ;;; cyrillic.el --- Support for languages which use Cyrillic characters | 1 ;;; cyrillic.el --- Support for Cyrillic -*- coding: iso-2022-7bit; -*- |
2 | 2 |
3 ;; Copyright (C) 1995,1999 Electrotechnical Laboratory, JAPAN. | 3 ;; Copyright (C) 1995,1999 Electrotechnical Laboratory, JAPAN. |
4 ;; Licensed to the Free Software Foundation. | 4 ;; Licensed to the Free Software Foundation. |
5 ;; Copyright (C) 1997 MORIOKA Tomohiko | 5 ;; Copyright (C) 1997 MORIOKA Tomohiko |
6 | 6 |
38 | 38 |
39 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 39 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
40 ;;; CYRILLIC | 40 ;;; CYRILLIC |
41 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 41 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
42 | 42 |
43 ;; (define-prefix-command 'describe-cyrillic-environment-map) | |
44 ;; (define-key-after describe-language-environment-map [Cyrillic] | |
45 ;; '("Cyrillic" . describe-cyrillic-environment-map) | |
46 ;; t) | |
47 | |
48 ;; (define-prefix-command 'setup-cyrillic-environment-map) | |
49 ;; (define-key-after setup-language-environment-map [Cyrillic] | |
50 ;; '("Cyrillic" . setup-cyrillic-environment-map) | |
51 ;; t) | |
52 | |
53 | |
54 ;; ISO-8859-5 staff | 43 ;; ISO-8859-5 staff |
55 | 44 |
56 ;; (make-coding-system | 45 ;; (make-coding-system |
57 ;; 'cyrillic-iso-8bit 2 ?5 | 46 ;; 'cyrillic-iso-8bit 2 ?5 |
58 ;; "ISO 2022 based 8-bit encoding for Cyrillic script (MIME:ISO-8859-5)" | 47 ;; "ISO 2022 based 8-bit encoding for Cyrillic script (MIME:ISO-8859-5)" |
59 ;; '((ascii t) (cyrillic-iso8859-5 t) nil nil | 48 ;; '(ascii cyrillic-iso8859-5 nil nil |
60 ;; nil ascii-eol ascii-cntl nil nil nil nil)) | 49 ;; nil nil nil nil nil nil nil) |
50 ;; '((safe-charsets ascii cyrillic-iso8859-5) | |
51 ;; (mime-charset . iso-8859-5))) | |
61 | 52 |
62 ;; (define-coding-system-alias 'iso-8859-5 'cyrillic-iso-8bit) | 53 ;; (define-coding-system-alias 'iso-8859-5 'cyrillic-iso-8bit) |
63 | 54 |
64 (make-coding-system | 55 (make-coding-system |
65 'iso-8859-5 'iso2022 | 56 'iso-8859-5 'iso2022 |
70 charset-g3 t | 61 charset-g3 t |
71 mnemonic "ISO8/Cyr" | 62 mnemonic "ISO8/Cyr" |
72 )) | 63 )) |
73 | 64 |
74 (set-language-info-alist | 65 (set-language-info-alist |
75 "Cyrillic-ISO" '((setup-function . (setup-cyrillic-iso-environment | 66 "Cyrillic-ISO" '((charset cyrillic-iso8859-5) |
76 . setup-cyrillic-environment-map)) | |
77 (charset . (cyrillic-iso8859-5)) | |
78 (tutorial . "TUTORIAL.ru") | 67 (tutorial . "TUTORIAL.ru") |
79 (coding-system . (iso-8859-5)) | 68 (coding-system iso-8859-5) |
69 (coding-priority iso-8859-5) | |
70 (input-method . "cyrillic-yawerty") | |
71 (features cyril-util) | |
80 (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") | 72 (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") |
81 (documentation . ("Support for Cyrillic ISO-8859-5." | 73 (documentation . "Support for Cyrillic ISO-8859-5.")) |
82 . describe-cyrillic-environment-map)))) | 74 '("Cyrillic")) |
83 | 75 |
84 ;; KOI-8 staff | 76 ;; KOI-8 staff |
85 | 77 |
86 (eval-and-compile | 78 (eval-and-compile |
87 | 79 |
139 (write-read-repeat r0) | 131 (write-read-repeat r0) |
140 ((read r0) | 132 ((read r0) |
141 (write-read-repeat r0 , cyrillic-koi8-r-encode-table)))))) | 133 (write-read-repeat r0 , cyrillic-koi8-r-encode-table)))))) |
142 "CCL program to encode KOI8.") | 134 "CCL program to encode KOI8.") |
143 | 135 |
144 ;(make-coding-system | 136 ;; (make-coding-system |
145 ; 'cyrillic-koi8 4 | 137 ;; 'cyrillic-koi8 4 |
146 ; ;; We used to use ?K. It is true that ?K is more strictly correct, | 138 ;; ;; We used to use ?K. It is true that ?K is more strictly correct, |
147 ; ;; but it is also used for Korean. | 139 ;; ;; but it is also used for Korean. |
148 ; ;; So people who use koi8 for languages other than Russian | 140 ;; ;; So people who use koi8 for languages other than Russian |
149 ; ;; will have to forgive us. | 141 ;; ;; will have to forgive us. |
150 ; ?R "KOI8 8-bit encoding for Cyrillic (MIME: KOI8-R)" | 142 ;; ?R "KOI8 8-bit encoding for Cyrillic (MIME: KOI8-R)" |
151 ; (cons ccl-decode-koi8 ccl-encode-koi8)) | 143 ;; '(ccl-decode-koi8 . ccl-encode-koi8) |
152 | 144 ;; '((safe-charsets ascii cyrillic-iso8859-5) |
153 ;(define-coding-system-alias 'koi8-r 'cyrillic-koi8) | 145 ;; (mime-charset . koi8-r) |
154 ;(define-coding-system-alias 'koi8 'cyrillic-koi8) | 146 ;; (valid-codes (0 . 127) 163 179 (192 . 255)) |
147 ;; (charset-origin-alist (cyrillic-iso8859-5 "KOI8-R" | |
148 ;; cyrillic-encode-koi8-r-char)))) | |
149 | |
150 ;; (define-coding-system-alias 'koi8-r 'cyrillic-koi8) | |
151 ;; (define-coding-system-alias 'koi8 'cyrillic-koi8) | |
155 | 152 |
156 (make-coding-system | 153 (make-coding-system |
157 'koi8-r 'ccl | 154 'koi8-r 'ccl |
158 "Coding-system used for KOI8-R." | 155 "Coding-system used for KOI8-R." |
159 `(decode ,ccl-decode-koi8 | 156 `(decode ,ccl-decode-koi8 |
160 encode ,ccl-encode-koi8 | 157 encode ,ccl-encode-koi8 |
161 mnemonic "KOI8")) | 158 mnemonic "KOI8")) |
162 | 159 |
163 ;(define-coding-system-alias 'koi8-r 'koi8) | 160 ;; it is not correct, but XEmacs doesn't have `ccl' category... |
161 (coding-system-put 'koi8-r 'category 'iso-8-1) | |
164 | 162 |
165 ;; (define-ccl-program ccl-encode-koi8-font | 163 ;; (define-ccl-program ccl-encode-koi8-font |
166 ;; '(0 | 164 ;; `(0 |
167 ;; ((r1 -= 160) | 165 ;; ((r1 |= 128) |
168 ;; (r1 = r1 | 166 ;; (r1 = r1 ,cyrillic-koi8-r-encode-table))) |
169 ;; [ 32 179 32 32 32 32 32 32 32 32 32 32 32 32 32 32 | |
170 ;; 225 226 247 231 228 229 246 250 233 234 235 236 237 238 239 240 | |
171 ;; 242 243 244 245 230 232 227 254 251 253 255 249 248 252 224 241 | |
172 ;; 193 194 215 199 196 197 214 218 201 202 203 204 205 206 207 208 | |
173 ;; 210 211 212 213 198 200 195 222 219 221 223 217 216 220 192 209 | |
174 ;; 32 163 32 32 32 32 32 32 32 32 32 32 32 32 32 32]) | |
175 ;; )) | |
176 ;; "CCL program to encode Cyrillic chars to KOI font.") | 167 ;; "CCL program to encode Cyrillic chars to KOI font.") |
177 | 168 |
178 ;; (setq font-ccl-encoder-alist | 169 ;; (setq font-ccl-encoder-alist |
179 ;; (cons (cons "koi8" ccl-encode-koi8-font) font-ccl-encoder-alist)) | 170 ;; (cons (cons "koi8" ccl-encode-koi8-font) font-ccl-encoder-alist)) |
180 | 171 |
172 ;; (defvar cyrillic-koi8-r-nonascii-translation-table | |
173 ;; (make-translation-table-from-vector cyrillic-koi8-r-decode-table) | |
174 ;; "Value of `nonascii-translation-table' in Cyrillic-KOI8 language environment..") | |
175 | |
181 (set-language-info-alist | 176 (set-language-info-alist |
182 "Cyrillic-KOI8" '((setup-function . (setup-cyrillic-koi8-environment | 177 "Cyrillic-KOI8" '((charset cyrillic-iso8859-5) |
183 . setup-cyrillic-environment-map)) | 178 (coding-system koi8-r) |
184 (charset . (cyrillic-iso8859-5)) | 179 (coding-priority koi8-r) |
185 (coding-system . (koi8-r)) | 180 (input-method . "cyrillic-yawerty") |
181 (features cyril-util) | |
186 (tutorial . "TUTORIAL.ru") | 182 (tutorial . "TUTORIAL.ru") |
187 (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") | 183 (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") |
188 (documentation . ("Support for Cyrillic KOI-8." | 184 (documentation . "Support for Cyrillic KOI8-R.")) |
189 . describe-cyrillic-environment-map)))) | 185 '("Cyrillic")) |
190 | 186 |
191 ;;; ALTERNATIVNYJ staff | 187 ;;; ALTERNATIVNYJ staff |
192 | 188 |
189 (eval-and-compile | |
190 | |
191 (defvar cyrillic-alternativnyj-decode-table | |
192 [ | |
193 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
194 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
195 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | |
196 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | |
197 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | |
198 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | |
199 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | |
200 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | |
201 ?,L0(B ?,L1(B ?,L2(B ?,L3(B ?,L4(B ?,L5(B ?,L6(B ?,L7(B ?,L8(B ?,L9(B ?,L:(B ?,L;(B ?,L<(B ?,L=(B ?,L>(B ?,L?(B | |
202 ?,L@(B ?,LA(B ?,LB(B ?,LC(B ?,LD(B ?,LE(B ?,LF(B ?,LG(B ?,LH(B ?,LI(B ?,LJ(B ?,LK(B ?,LL(B ?,LM(B ?,LN(B ?,LO(B | |
203 ?,LP(B ?,LQ(B ?,LR(B ?,LS(B ?,LT(B ?,LU(B ?,LV(B ?,LW(B ?,LX(B ?,LY(B ?,LZ(B ?,L[(B ?,L\(B ?,L](B ?,L^(B ?,L_(B | |
204 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 | |
205 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 | |
206 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 | |
207 ?,L`(B ?,La(B ?,Lb(B ?,Lc(B ?,Ld(B ?,Le(B ?,Lf(B ?,Lg(B ?,Lh(B ?,Li(B ?,Lj(B ?,Lk(B ?,Ll(B ?,Lm(B ?,Ln(B ?,Lo(B | |
208 ?,L!(B ?,Lq(B 32 32 32 32 32 32 32 32 32 32 32 32 32 ?,Lp(B] | |
209 "Cyrillic ALTERNATIVNYJ decoding table.") | |
210 | |
211 (defvar cyrillic-alternativnyj-encode-table | |
212 (let ((table (make-vector 256 32)) | |
213 (i 0)) | |
214 (while (< i 256) | |
215 (let* ((ch (aref cyrillic-alternativnyj-decode-table i)) | |
216 (split (split-char ch))) | |
217 (if (eq (car split) 'cyrillic-iso8859-5) | |
218 (aset table (logior (nth 1 split) 128) i) | |
219 (if (/= ch 32) | |
220 (aset table ch i)))) | |
221 (setq i (1+ i))) | |
222 table) | |
223 "Cyrillic ALTERNATIVNYJ encoding table.") | |
224 | |
225 ) | |
226 | |
227 | |
193 (define-ccl-program ccl-decode-alternativnyj | 228 (define-ccl-program ccl-decode-alternativnyj |
194 '(3 | 229 `(3 |
195 ((read r0) | 230 ((read r0) |
196 (loop | 231 (loop |
197 (write-read-repeat | 232 (write-read-repeat r0 ,cyrillic-alternativnyj-decode-table)))) |
198 r0 | |
199 [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
200 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
201 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | |
202 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | |
203 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | |
204 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | |
205 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | |
206 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | |
207 ?,L0(B ?,L1(B ?,L2(B ?,L3(B ?,L4(B ?,L5(B ?,L6(B ?,L7(B ?,L8(B ?,L9(B ?,L:(B ?,L;(B ?,L<(B ?,L=(B ?,L>(B ?,L?(B | |
208 ?,L@(B ?,LA(B ?,LB(B ?,LC(B ?,LD(B ?,LE(B ?,LF(B ?,LG(B ?,LH(B ?,LI(B ?,LJ(B ?,LK(B ?,LL(B ?,LM(B ?,LN(B ?,LO(B | |
209 ?,LP(B ?,LQ(B ?,LR(B ?,LS(B ?,LT(B ?,LU(B ?,LV(B ?,LW(B ?,LX(B ?,LY(B ?,LZ(B ?,L[(B ?,L\(B ?,L](B ?,L^(B ?,L_(B | |
210 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 | |
211 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 | |
212 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 | |
213 ?,L`(B ?,La(B ?,Lb(B ?,Lc(B ?,Ld(B ?,Le(B ?,Lf(B ?,Lg(B ?,Lh(B ?,Li(B ?,Lj(B ?,Lk(B ?,Ll(B ?,Lm(B ?,Ln(B ?,Lo(B | |
214 ?,L!(B ?,Lq(B 32 32 32 32 32 32 32 32 32 32 32 32 32 ?,Lp(B])))) | |
215 "CCL program to decode Alternativnyj.") | 233 "CCL program to decode Alternativnyj.") |
216 | 234 |
217 (define-ccl-program ccl-encode-alternativnyj | 235 (define-ccl-program ccl-encode-alternativnyj |
218 `(1 | 236 `(1 |
219 ((read r0) | 237 ((read r0) |
220 (loop | 238 (loop |
221 (if (r0 != ,(charset-id 'cyrillic-iso8859-5)) | 239 (if (r0 != ,(charset-id 'cyrillic-iso8859-5)) |
222 (write-read-repeat r0) | 240 (write-read-repeat r0) |
223 ((read r0) | 241 ((read r0) |
224 (r0 -= 160) | 242 (write-read-repeat r0 ,cyrillic-alternativnyj-encode-table)))))) |
225 (write-read-repeat | |
226 r0 | |
227 [ 32 240 32 32 32 32 32 32 32 32 32 32 32 32 32 32 | |
228 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | |
229 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | |
230 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | |
231 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | |
232 255 241 32 32 32 32 32 32 32 32 32 32 32 32 32 32]) | |
233 ))))) | |
234 "CCL program to encode Alternativnyj.") | 243 "CCL program to encode Alternativnyj.") |
235 | 244 |
236 ;; (make-coding-system | 245 ;; (make-coding-system |
237 ;; 'alternativnyj 4 | 246 ;; 'cyrillic-alternativnyj 4 ?A |
238 ;; ?A "Coding-system used for Alternativnyj" | 247 ;; "ALTERNATIVNYJ 8-bit encoding for Cyrillic" |
239 ;; (cons ccl-decode-alternativnyj ccl-encode-alternativnyj)) | 248 ;; '(ccl-decode-alternativnyj . ccl-encode-alternativnyj) |
249 ;; '((safe-charsets ascii cyrillic-iso8859-5) | |
250 ;; (valid-codes (0 . 175) (224 . 241) 255) | |
251 ;; (charset-origin-alist (cyrillic-iso8859-5 "ALTERNATIVNYJ" | |
252 ;; cyrillic-encode-koi8-r-char)))) | |
253 | |
254 | |
255 ;; (define-coding-system-alias 'alternativnyj 'cyrillic-alternativnyj) | |
240 | 256 |
241 (make-coding-system | 257 (make-coding-system |
242 'alternativnyj 'ccl | 258 'alternativnyj 'ccl |
243 "Coding-system used for Alternativnyj" | 259 "Coding-system used for Alternativnyj" |
244 `(decode ,ccl-decode-alternativnyj | 260 `(decode ,ccl-decode-alternativnyj |
245 encode ,ccl-encode-alternativnyj | 261 encode ,ccl-encode-alternativnyj |
246 mnemonic "Cy.Alt")) | 262 mnemonic "Cy.Alt")) |
247 | 263 |
264 ;; it is not correct, but XEmacs doesn't have `ccl' category... | |
265 (coding-system-put 'alternativnyj 'category 'iso-8-1) | |
266 | |
248 ;; (define-ccl-program ccl-encode-alternativnyj-font | 267 ;; (define-ccl-program ccl-encode-alternativnyj-font |
249 ;; '(0 | 268 ;; '(0 |
250 ;; ((r1 -= 160) | 269 ;; ((r1 |= 128) |
251 ;; (r1 = r1 | 270 ;; (r1 = r1 ,cyrillic-alternativnyj-encode-table))) |
252 ;; [ 32 240 32 32 32 32 32 32 32 32 32 32 32 32 32 32 | |
253 ;; 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | |
254 ;; 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | |
255 ;; 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | |
256 ;; 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | |
257 ;; 255 241 32 32 32 32 32 32 32 32 32 32 32 32 32 32]) | |
258 ;; )) | |
259 ;; "CCL program to encode Cyrillic chars to Alternativnyj font.") | 271 ;; "CCL program to encode Cyrillic chars to Alternativnyj font.") |
260 | 272 |
261 ;; (setq font-ccl-encoder-alist | 273 ;; (setq font-ccl-encoder-alist |
262 ;; (cons (cons "alternativnyj" ccl-encode-alternativnyj-font) | 274 ;; (cons (cons "alternativnyj" ccl-encode-alternativnyj-font) |
263 ;; font-ccl-encoder-alist)) | 275 ;; font-ccl-encoder-alist)) |
264 | 276 |
277 ;; (defvar cyrillic-alternativnyj-nonascii-translation-table | |
278 ;; (make-translation-table-from-vector cyrillic-alternativnyj-decode-table) | |
279 ;; "Value of `nonascii-translation-table' in Cyrillic-ALT language environment.") | |
280 | |
265 (set-language-info-alist | 281 (set-language-info-alist |
266 "Cyrillic-ALT" '((setup-function . (setup-cyrillic-alternativnyj-environment | 282 "Cyrillic-ALT" '((charset cyrillic-iso8859-5) |
267 . setup-cyrillic-environment-map)) | 283 (coding-system alternativnyj) |
268 (charset . (cyrillic-iso8859-5)) | 284 (coding-priority alternativnyj) |
269 (coding-system . (alternativnyj)) | 285 (input-method . "cyrillic-yawerty") |
286 (features cyril-util) | |
270 (tutorial . "TUTORIAL.ru") | 287 (tutorial . "TUTORIAL.ru") |
271 (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") | 288 (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") |
272 (documentation . ("Support for Cyrillic ALTERNATIVNYJ." | 289 (documentation . "Support for Cyrillic ALTERNATIVNYJ.")) |
273 . describe-cyrillic-environment-map)))) | 290 '("Cyrillic")) |
274 | |
275 ;;; GENERAL | |
276 | |
277 (defun setup-cyrillic-environment () | |
278 "Setup multilingual environment for Cyrillic users." | |
279 (interactive) | |
280 (setq primary-language "Cyrillic") | |
281 | |
282 (setq coding-category-iso-8-1 'iso-8859-5) | |
283 | |
284 (set-coding-priority | |
285 '(coding-category-iso-7 | |
286 coding-category-iso-8-1)) | |
287 | |
288 (setq-default buffer-file-coding-system 'iso-8859-5) | |
289 (set-terminal-coding-system 'iso-8859-5) | |
290 (set-keyboard-coding-system 'iso-8859-5) | |
291 | |
292 (setq default-input-method '("Cyrillic" . "quail-yawerty")) | |
293 ) | |
294 | |
295 (defun describe-cyrillic-support () | |
296 "Describe how Emacs support Cyrillic." | |
297 (interactive) | |
298 (describe-language-support-internal "Cyrillic")) | |
299 | |
300 (set-language-info-alist | |
301 "Cyrillic" '((setup-function . setup-cyrillic-environment) | |
302 (describe-function . describe-cyrillic-support) | |
303 (charset . (cyrillic-iso8859-5)) | |
304 (tutorial . "TUTORIAL.ru") | |
305 (coding-system . (iso-8859-5 koi8-r alternativnyj)) | |
306 (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") | |
307 (documentation . nil))) | |
308 | 291 |
309 ;;; cyrillic.el ends here | 292 ;;; cyrillic.el ends here |