X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fmule%2Fcyrillic.el;h=a7bc3cbe3ed0e494f8f8b1b0619c6255386942a4;hb=dcd3a7e85277cef386e90fcd0a3958bd379f030f;hp=24322f824bc76d0dfdc5174abb2113e7b512f11a;hpb=28a3fa29bc0bd9a124b6e3379e82d62e815c22a2;p=chise%2Fxemacs-chise.git.1 diff --git a/lisp/mule/cyrillic.el b/lisp/mule/cyrillic.el index 24322f8..a7bc3cb 100644 --- a/lisp/mule/cyrillic.el +++ b/lisp/mule/cyrillic.el @@ -1,6 +1,6 @@ -;;; cyrillic.el --- Support for languages which use Cyrillic characters +;;; cyrillic.el --- Support for Cyrillic -*- coding: iso-2022-7bit; -*- -;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. +;; Copyright (C) 1995,1999 Electrotechnical Laboratory, JAPAN. ;; Licensed to the Free Software Foundation. ;; Copyright (C) 1997 MORIOKA Tomohiko @@ -25,12 +25,13 @@ ;;; Commentary: -;; The character set ISO8859-5 is supported. KOI-8 and ALTERNATIVNYJ -;; are converted to ISO8859-5 internally. +;; The character set ISO8859-5 is supported. +;; KOI-8, Windows-1251, and ALTERNATIVNYJ are converted to ISO8859-5 +;; internally. ;;; Code: -;; For syntax of Cyrillic +;; Cyrillic syntax (modify-syntax-entry 'cyrillic-iso8859-5 "w") (modify-syntax-entry ?,L-(B ".") (modify-syntax-entry ?,Lp(B ".") @@ -40,30 +41,11 @@ ;;; CYRILLIC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-prefix-command 'describe-cyrillic-environment-map) -;; (define-key-after describe-language-environment-map [Cyrillic] -;; '("Cyrillic" . describe-cyrillic-environment-map) -;; t) - -;; (define-prefix-command 'setup-cyrillic-environment-map) -;; (define-key-after setup-language-environment-map [Cyrillic] -;; '("Cyrillic" . setup-cyrillic-environment-map) -;; t) - - -;; ISO-8859-5 staff - -;; (make-coding-system -;; 'cyrillic-iso-8bit 2 ?5 -;; "ISO 2022 based 8-bit encoding for Cyrillic script (MIME:ISO-8859-5)" -;; '((ascii t) (cyrillic-iso8859-5 t) nil nil -;; nil ascii-eol ascii-cntl nil nil nil nil)) - -;; (define-coding-system-alias 'iso-8859-5 'cyrillic-iso-8bit) +;; ISO-8859-5 (make-coding-system 'iso-8859-5 'iso2022 - "MIME ISO-8859-5" + "ISO-8859-5 (ISO 2022 based 8-bit encoding for Cyrillic script)" '(charset-g0 ascii charset-g1 cyrillic-iso8859-5 charset-g2 t @@ -72,223 +54,352 @@ )) (set-language-info-alist - "Cyrillic-ISO" '((setup-function . (setup-cyrillic-iso-environment - . setup-cyrillic-environment-map)) - (charset . (cyrillic-iso8859-5)) + "Cyrillic-ISO" '((charset cyrillic-iso8859-5) (tutorial . "TUTORIAL.ru") - (coding-system . (iso-8859-5)) + (coding-system iso-8859-5) + (coding-priority iso-8859-5) + (input-method . "cyrillic-yawerty") + (features cyril-util) (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") - (documentation . ("Support for Cyrillic ISO-8859-5." - . describe-cyrillic-environment-map)))) - -;; KOI-8 staff + (documentation . "Support for Cyrillic ISO-8859-5.")) + '("Cyrillic")) + +;; KOI-8 + +(eval-and-compile + +(defvar cyrillic-koi8-r-decode-table + [ + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 + 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 + 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 + 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 + 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 + 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 + 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 + ?$B(!(B ?$B("(B ?$B(#(B ?$B($(B ?$B(&(B ?$B(%(B ?$B('(B ?$B()(B ?$B(((B ?$B(*(B ?$B(+(B 32 ?$(G#'(B ?$(G#+(B ?$(G#/(B 32 + 32 ?$(C"F(B 32 32 ?$B"#(B 32 ?$B"e(B ?$A!V(B ?$A!\(B ?$A!](B ?,L (B 32 ?,A0(B ?,A2(B ?,A7(B ?,Aw(B + ?$(G#D(B 32 32 ?,Lq(B 32 32 32 32 32 32 32 32 32 32 32 ?$(G#E(B + 32 32 ?$(G#G(B ?,L!(B 32 32 32 32 32 32 32 32 ?$(G#F(B 32 32 ?,A)(B + ?,Ln(B ?,LP(B ?,LQ(B ?,Lf(B ?,LT(B ?,LU(B ?,Ld(B ?,LS(B ?,Le(B ?,LX(B ?,LY(B ?,LZ(B ?,L[(B ?,L\(B ?,L](B ?,L^(B + ?,L_(B ?,Lo(B ?,L`(B ?,La(B ?,Lb(B ?,Lc(B ?,LV(B ?,LR(B ?,Ll(B ?,Lk(B ?,LW(B ?,Lh(B ?,Lm(B ?,Li(B ?,Lg(B ?,Lj(B + ?,LN(B ?,L0(B ?,L1(B ?,LF(B ?,L4(B ?,L5(B ?,LD(B ?,L3(B ?,LE(B ?,L8(B ?,L9(B ?,L:(B ?,L;(B ?,L<(B ?,L=(B ?,L>(B + ?,L?(B ?,LO(B ?,L@(B ?,LA(B ?,LB(B ?,LC(B ?,L6(B ?,L2(B ?,LL(B ?,LK(B ?,L7(B ?,LH(B ?,LM(B ?,LI(B ?,LG(B ?,LJ(B ] + "Cyrillic KOI8-R decoding table.") + +(defvar cyrillic-koi8-r-encode-table + (let ((table (make-vector 256 32)) + (i 0)) + (while (< i 256) + (let* ((ch (aref cyrillic-koi8-r-decode-table i)) + (split (split-char ch))) + (cond ((eq (car split) 'cyrillic-iso8859-5) + (aset table (logior (nth 1 split) 128) i) + ) + ((eq ch 32)) + ((eq (car split) 'ascii) + (aset table ch i) + ))) + (setq i (1+ i))) + table) + "Cyrillic KOI8-R encoding table.") + +) (define-ccl-program ccl-decode-koi8 - '(3 + `(3 ((read r0) (loop - (write-read-repeat - r0 - [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 - 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 - 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 - 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 - 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 - 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 - 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 - 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 - 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 - 32 32 32 ?,Lq(B 32 32 32 32 32 32 32 32 32 32 32 32 - 32 32 32 ?,L!(B 32 32 32 32 32 32 32 32 32 32 32 32 - ?,Ln(B ?,LP(B ?,LQ(B ?,Lf(B ?,LT(B ?,LU(B ?,Ld(B ?,LS(B ?,Le(B ?,LX(B ?,LY(B ?,LZ(B ?,L[(B ?,L\(B ?,L](B ?,L^(B - ?,L_(B ?,Lo(B ?,L`(B ?,La(B ?,Lb(B ?,Lc(B ?,LV(B ?,LR(B ?,Ll(B ?,Lk(B ?,LW(B ?,Lh(B ?,Lm(B ?,Li(B ?,Lg(B ?,Lj(B - ?,LN(B ?,L0(B ?,L1(B ?,LF(B ?,L4(B ?,L5(B ?,LD(B ?,L3(B ?,LE(B ?,L8(B ?,L9(B ?,L:(B ?,L;(B ?,L<(B ?,L=(B ?,L>(B - ?,L?(B ?,LO(B ?,L@(B ?,LA(B ?,LB(B ?,LC(B ?,L6(B ?,L2(B ?,LL(B ?,LK(B ?,L7(B ?,LH(B ?,LM(B ?,LI(B ?,LG(B ?,LJ(B ])))) + (write-read-repeat r0 ,cyrillic-koi8-r-decode-table)))) "CCL program to decode KOI8.") (define-ccl-program ccl-encode-koi8 `(1 ((read r0) (loop - (if (r0 != ,(charset-id 'cyrillic-iso8859-5)) - (write-read-repeat r0) - ((read r0) - (r0 -= 160) - (write-read-repeat - r0 - [ 32 179 32 32 32 32 32 32 32 32 32 32 32 32 32 32 - 225 226 247 231 228 229 246 250 233 234 235 236 237 238 239 240 - 242 243 244 245 230 232 227 254 251 253 255 249 248 252 224 241 - 193 194 215 199 196 197 214 218 201 202 203 204 205 206 207 208 - 210 211 212 213 198 200 195 222 219 221 223 217 216 220 192 209 - 32 163 32 32 32 32 32 32 32 32 32 32 32 32 32 32]) - ))))) + (if (r0 != ,(charset-id 'cyrillic-iso8859-5)) + (write-read-repeat r0) + ((read r0) + (write-read-repeat r0 , cyrillic-koi8-r-encode-table)))))) "CCL program to encode KOI8.") -;(make-coding-system -; 'cyrillic-koi8 4 -; ;; We used to use ?K. It is true that ?K is more strictly correct, -; ;; but it is also used for Korean. -; ;; So people who use koi8 for languages other than Russian -; ;; will have to forgive us. -; ?R "KOI8 8-bit encoding for Cyrillic (MIME: KOI8-R)" -; (cons ccl-decode-koi8 ccl-encode-koi8)) - -;(define-coding-system-alias 'koi8-r 'cyrillic-koi8) -;(define-coding-system-alias 'koi8 'cyrillic-koi8) +;; (define-coding-system-alias 'koi8-r 'cyrillic-koi8) +;; (define-coding-system-alias 'koi8 'cyrillic-koi8) (make-coding-system 'koi8-r 'ccl - "Coding-system used for KOI8-R." - `(decode ,ccl-decode-koi8 - encode ,ccl-encode-koi8 + "KOI8-R 8-bit encoding for Cyrillic." + '(decode ccl-decode-koi8 + encode ccl-encode-koi8 mnemonic "KOI8")) -;(define-coding-system-alias 'koi8-r 'koi8) +;; `iso-8-1' is not correct, but XEmacs doesn't have a `ccl' category +(coding-system-put 'koi8-r 'category 'iso-8-1) -;; (define-ccl-program ccl-encode-koi8-font -;; '(0 -;; ((r1 -= 160) -;; (r1 = r1 -;; [ 32 179 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -;; 225 226 247 231 228 229 246 250 233 234 235 236 237 238 239 240 -;; 242 243 244 245 230 232 227 254 251 253 255 249 248 252 224 241 -;; 193 194 215 199 196 197 214 218 201 202 203 204 205 206 207 208 -;; 210 211 212 213 198 200 195 222 219 221 223 217 216 220 192 209 -;; 32 163 32 32 32 32 32 32 32 32 32 32 32 32 32 32]) -;; )) -;; "CCL program to encode Cyrillic chars to KOI font.") +(define-ccl-program ccl-encode-koi8-r-font + `(0 + ((r1 |= 128) + (r1 = r1 ,cyrillic-koi8-r-encode-table))) + "CCL program to encode Cyrillic chars to koi8-r font.") ;; (setq font-ccl-encoder-alist ;; (cons (cons "koi8" ccl-encode-koi8-font) font-ccl-encoder-alist)) +;; (defvar cyrillic-koi8-r-nonascii-translation-table +;; (make-translation-table-from-vector cyrillic-koi8-r-decode-table) +;; "Value of `nonascii-translation-table' in Cyrillic-KOI8 language environment..") + (set-language-info-alist - "Cyrillic-KOI8" '((setup-function . (setup-cyrillic-koi8-environment - . setup-cyrillic-environment-map)) - (charset . (cyrillic-iso8859-5)) - (coding-system . (koi8-r)) + "Cyrillic-KOI8" '((charset cyrillic-iso8859-5) + (coding-system koi8-r) + (coding-priority koi8-r) + (input-method . "cyrillic-yawerty") + (features cyril-util) (tutorial . "TUTORIAL.ru") (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") - (documentation . ("Support for Cyrillic KOI-8." - . describe-cyrillic-environment-map)))) + (documentation . "Support for Cyrillic KOI8-R.")) + '("Cyrillic")) + +;;; WINDOWS-1251 + +(eval-and-compile + +(defvar cyrillic-windows-1251-decode-table + [ + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 + 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 + 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 + 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 + 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 + 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 + 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 + ?,L"(B ?,L#(B 32 ?,Ls(B 32 32 32 32 32 32 ?,L)(B 32 ?,L*(B ?,L,(B ?,L+(B ?,L/(B ;" + ?,Lr(B 32 32 32 32 32 32 32 32 32 ?,Ly(B 32 ?,Lz(B ?,L|(B ?,L{(B ?,L(B + ?,L (B ?,L.(B ?,L~(B ?,L((B ?,A$(B 32 ?,A&(B ?,L}(B ?,L!(B ?,A)(B ?,L$(B ?,A+(B ?,A,(B ?,L-(B ?,A.(B ?,L'(B + ?,A0(B ?,A1(B ?,L&(B ?,Lv(B 32 ?,A5(B ?,A6(B ?,A7(B ?,Lq(B ?,Lp(B ?,Lt(B ?,A;(B ?,Lx(B ?,L%(B ?,Lu(B ?,Lw(B + ?,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 + ?,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 + ?,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 + ?,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 ] + "Cyrillic Windows-1251 decoding table.") + +(defvar cyrillic-windows-1251-encode-table + (let ((table (make-vector 256 32)) + (i 0)) + (while (< i 256) + (let* ((ch (aref cyrillic-windows-1251-decode-table i)) + (split (split-char ch))) + (cond ((eq (car split) 'cyrillic-iso8859-5) + (aset table (logior (nth 1 split) 128) i) + ) + ((eq ch 32)) + ((eq (car split) 'ascii) + (aset table ch i) + ))) + (setq i (1+ i))) + table) + "Cyrillic Windows-1251 encoding table.") + +) + +(define-ccl-program ccl-decode-windows1251 + `(3 + ((read r0) + (loop + (write-read-repeat r0 ,cyrillic-windows-1251-decode-table)))) + "CCL program to decode Windows-1251.") + +(define-ccl-program ccl-encode-windows1251 + `(1 + ((read r0) + (loop + (if (r0 != ,(charset-id 'cyrillic-iso8859-5)) + (write-read-repeat r0) + ((read r0) + (write-read-repeat r0 , cyrillic-windows-1251-encode-table)))))) + "CCL program to encode Windows-1251.") + +(make-coding-system + 'windows-1251 'ccl + "Coding-system used for Windows-1251." + '(decode ccl-decode-windows1251 + encode ccl-encode-windows1251 + mnemonic "CyrW")) + +;; `iso-8-1' is not correct, but XEmacs doesn't have a `ccl' category +(coding-system-put 'windows-1251 'category 'iso-8-1) + +(set-language-info-alist + "Cyrillic-Win" '((charset cyrillic-iso8859-5) + (coding-system windows-1251) + (coding-priority windows-1251) + (input-method . "cyrillic-yawerty") + (features cyril-util) + (tutorial . "TUTORIAL.ru") + (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") + (documentation . "Support for Cyrillic Windows-1251.")) + '("Cyrillic")) + +;;; ALTERNATIVNYJ + +(eval-and-compile + +(defvar cyrillic-alternativnyj-decode-table + [ + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 + 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 + 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 + 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 + 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 + 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 + 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 + ?,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 + ?,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 + ?,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 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 + ?,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 + ?,L!(B ?,Lq(B 32 32 32 32 32 32 32 32 32 32 32 32 32 ?,Lp(B] + "Cyrillic ALTERNATIVNYJ decoding table.") + +(defvar cyrillic-alternativnyj-encode-table + (let ((table (make-vector 256 32)) + (i 0)) + (while (< i 256) + (let* ((ch (aref cyrillic-alternativnyj-decode-table i)) + (split (split-char ch))) + (if (eq (car split) 'cyrillic-iso8859-5) + (aset table (logior (nth 1 split) 128) i) + (if (/= ch 32) + (aset table ch i)))) + (setq i (1+ i))) + table) + "Cyrillic ALTERNATIVNYJ encoding table.") + +) -;;; ALTERNATIVNYJ staff (define-ccl-program ccl-decode-alternativnyj - '(3 + `(3 ((read r0) (loop - (write-read-repeat - r0 - [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 - 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 - 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 - 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 - 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 - 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 - 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 - ?,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 - ?,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 - ?,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 - 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 - 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 - 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 - ?,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 - ?,L!(B ?,Lq(B 32 32 32 32 32 32 32 32 32 32 32 32 32 ?,Lp(B])))) + (write-read-repeat r0 ,cyrillic-alternativnyj-decode-table)))) "CCL program to decode Alternativnyj.") (define-ccl-program ccl-encode-alternativnyj `(1 ((read r0) (loop - (if (r0 != ,(charset-id 'cyrillic-iso8859-5)) - (write-read-repeat r0) - ((read r0) - (r0 -= 160) - (write-read-repeat - r0 - [ 32 240 32 32 32 32 32 32 32 32 32 32 32 32 32 32 - 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 - 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 - 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 - 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 - 255 241 32 32 32 32 32 32 32 32 32 32 32 32 32 32]) - ))))) + (if (r0 != ,(charset-id 'cyrillic-iso8859-5)) + (write-read-repeat r0) + ((read r0) + (write-read-repeat r0 ,cyrillic-alternativnyj-encode-table)))))) "CCL program to encode Alternativnyj.") -;; (make-coding-system -;; 'alternativnyj 4 -;; ?A "Coding-system used for Alternativnyj" -;; (cons ccl-decode-alternativnyj ccl-encode-alternativnyj)) +;; (define-coding-system-alias 'alternativnyj 'cyrillic-alternativnyj) (make-coding-system 'alternativnyj 'ccl "Coding-system used for Alternativnyj" - `(decode ,ccl-decode-alternativnyj - encode ,ccl-encode-alternativnyj + '(decode ccl-decode-alternativnyj + encode ccl-encode-alternativnyj mnemonic "Cy.Alt")) +;; `iso-8-1' is not correct, but XEmacs doesn't have `ccl' category +(coding-system-put 'alternativnyj 'category 'iso-8-1) + ;; (define-ccl-program ccl-encode-alternativnyj-font ;; '(0 -;; ((r1 -= 160) -;; (r1 = r1 -;; [ 32 240 32 32 32 32 32 32 32 32 32 32 32 32 32 32 -;; 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 -;; 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 -;; 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 -;; 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 -;; 255 241 32 32 32 32 32 32 32 32 32 32 32 32 32 32]) -;; )) +;; ((r1 |= 128) +;; (r1 = r1 ,cyrillic-alternativnyj-encode-table))) ;; "CCL program to encode Cyrillic chars to Alternativnyj font.") ;; (setq font-ccl-encoder-alist ;; (cons (cons "alternativnyj" ccl-encode-alternativnyj-font) ;; font-ccl-encoder-alist)) +;; (defvar cyrillic-alternativnyj-nonascii-translation-table +;; (make-translation-table-from-vector cyrillic-alternativnyj-decode-table) +;; "Value of `nonascii-translation-table' in Cyrillic-ALT language environment.") + (set-language-info-alist - "Cyrillic-ALT" '((setup-function . (setup-cyrillic-alternativnyj-environment - . setup-cyrillic-environment-map)) - (charset . (cyrillic-iso8859-5)) - (coding-system . (alternativnyj)) + "Cyrillic-ALT" '((charset cyrillic-iso8859-5) + (coding-system alternativnyj) + (coding-priority alternativnyj) + (input-method . "cyrillic-yawerty") + (features cyril-util) (tutorial . "TUTORIAL.ru") (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") - (documentation . ("Support for Cyrillic ALTERNATIVNYJ." - . describe-cyrillic-environment-map)))) - -;;; GENERAL - -(defun setup-cyrillic-environment () - "Setup multilingual environment for Cyrillic users." - (interactive) - (setq primary-language "Cyrillic") - - (setq coding-category-iso-8-1 'iso-8859-5) - - (set-coding-priority - '(coding-category-iso-7 - coding-category-iso-8-1)) - - (setq-default buffer-file-coding-system 'iso-8859-5) - (set-terminal-coding-system 'iso-8859-5) - (set-keyboard-coding-system 'iso-8859-5) - - (setq default-input-method '("Cyrillic" . "quail-yawerty")) - ) + (documentation . "Support for Cyrillic ALTERNATIVNYJ.")) + '("Cyrillic")) + +;; +;; Setup case table +;; + +;; FIXME: this defun is cut-and-pasted from mule/latin.el +(defun setup-case-pairs (charset pairs) + (let ((tbl (standard-case-table))) + (loop for (uc lc) in pairs do + (put-case-table-pair (make-char charset uc) (make-char charset lc) tbl)))) + +(setup-case-pairs + 'cyrillic-iso8859-5 + '( + (176 208) ;cyrillic letter a + (167 247) ;cyrillic letter yi + (205 237) ;cyrillic letter e + (174 254) ;cyrillic letter short u + (177 209) ;cyrillic letter be + (197 229) ;cyrillic letter ha + (184 216) ;cyrillic letter i + (180 212) ;cyrillic letter de + (198 230) ;cyrillic letter tse + (206 238) ;cyrillic letter yu + (190 222) ;cyrillic letter o + (168 248) ;cyrillic letter je + (202 234) ;cyrillic letter hard sign + (199 231) ;cyrillic letter che + (164 244) ;cyrillic letter ukrainian ie + (162 242) ;cyrillic letter dje + (179 211) ;cyrillic letter ghe + (195 227) ;cyrillic letter u + (191 223) ;cyrillic letter pe + (163 243) ;cyrillic letter gje + (194 226) ;cyrillic letter te + (172 252) ;cyrillic letter kje + (178 210) ;cyrillic letter ve + (169 249) ;cyrillic letter lje + (200 232) ;cyrillic letter sha + (170 250) ;cyrillic letter nje + (183 215) ;cyrillic letter ze + (165 245) ;cyrillic letter dze + (203 235) ;cyrillic letter yeru + (201 233) ;cyrillic letter shcha + (182 214) ;cyrillic letter zhe + (175 255) ;cyrillic letter dzhe + (196 228) ;cyrillic letter ef + (186 218) ;cyrillic letter ka + (204 236) ;cyrillic letter soft sign + (181 213) ;cyrillic letter ie + (187 219) ;cyrillic letter el + (188 220) ;cyrillic letter em + (189 221) ;cyrillic letter en + (171 251) ;cyrillic letter tshe + (192 224) ;cyrillic letter er + (161 241) ;cyrillic letter io + (166 246) ;cyrillic letter byelorussian-ukrainian i + (193 225) ;cyrillic letter es + (185 217) ;cyrillic letter short i + (207 239) ;cyrillic letter ya + )) -(defun describe-cyrillic-support () - "Describe how Emacs support Cyrillic." - (interactive) - (describe-language-support-internal "Cyrillic")) +;; This is our utility function; we don't want it in the dumped XEmacs. -(set-language-info-alist - "Cyrillic" '((setup-function . setup-cyrillic-environment) - (describe-function . describe-cyrillic-support) - (charset . (cyrillic-iso8859-5)) - (tutorial . "TUTORIAL.ru") - (coding-system . (iso-8859-5 koi8-r alternativnyj)) - (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") - (documentation . nil))) +(fmakunbound 'setup-case-pairs) ;;; cyrillic.el ends here