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