# HG changeset patch # User Kenichi Handa # Date 902020017 0 # Node ID e0e17bbd8e6cd1be1cc96c15ccdac01481321c38 # Parent 125bb37b2e27145717846dda2101c10a37e0df7f (cyrillic-koi8-r-decode-table): New variable. (cyrillic-koi8-r-encode-table): Likewise. (ccl-decode-koi8): Use cyrillic-koi8-r-decode-table. (ccl-encode-koi8): Use cyrillic-koi8-r-encode-table. (ccl-encode-koi8-font): Likewise. (cyrillic-koi8-r-nonascii-translation-table): New variable. ("Cyrillic-KOI8"): Add nonascii-translation-table and charset-origin-alist properties. (cyrillic-alternativnyj-decode-table): New variable. (cyrillic-alternativnyj-encode-table): Likewise. (ccl-decode-alternativnyj): Use cyrillic-alternativnyj-decode-table. (ccl-encode-alternativnyj): Use cyrillic-alternativnyj-encode-table. (ccl-encode-alternativnyj-font): Likewise. (cyrillic-alternativnyj-nonascii-translation-table): New variable. ("Cyrillic-ALT"): Add nonascii-translation-table and charset-origin-alist properties. diff -r 125bb37b2e27 -r e0e17bbd8e6c lisp/language/cyrillic.el --- a/lisp/language/cyrillic.el Sun Aug 02 01:06:57 1998 +0000 +++ b/lisp/language/cyrillic.el Sun Aug 02 01:06:57 1998 +0000 @@ -54,28 +54,49 @@ ;; KOI-8 staff +(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 + 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 ] + "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))) + (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 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 @@ -85,16 +106,7 @@ (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]) - ))))) + (write-read-repeat r0 , cyrillic-koi8-r-encode-table)))))) "CCL program to encode KOI8.") (make-coding-system @@ -106,60 +118,84 @@ ?R "KOI8 8-bit encoding for Cyrillic (MIME: KOI8-R)" '(ccl-decode-koi8 . ccl-encode-koi8) '((safe-charsets ascii cyrillic-iso8859-5) - (mime-charset . koi8-r))) + (mime-charset . koi8-r) + (valid-codes (0 127) 163 179 (192 255)))) (define-coding-system-alias 'koi8-r 'cyrillic-koi8) (define-coding-system-alias 'koi8 'cyrillic-koi8) (define-ccl-program ccl-encode-koi8-font - '(0 - ((r1 -= 32) - (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]) - )) + `(0 + ((r1 |= 128) + (r1 = r1 ,cyrillic-koi8-r-encode-table))) "CCL program to encode Cyrillic chars to KOI 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) + "Cyrillic-KOI8" `((setup-function . setup-cyrillic-koi8-environment) (charset cyrillic-iso8859-5) + (nonascii-translation-table + . ,cyrillic-koi8-r-nonascii-translation-table) + (charset-origin-alist + (cyrillic-iso8859-5 "KOI8-R" cyrillic-encode-koi8-r-char)) (coding-system cyrillic-koi8) (coding-priority cyrillic-koi8) (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!") - (documentation . "Support for Cyrillic KOI-8.")) + (documentation . "Support for Cyrillic KOI8-R.")) '("Cyrillic")) ;;; ALTERNATIVNYJ staff +(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 (nth 1 split) i) + (if (/= ch 32) + (aset table ch i)))) + (setq i (1+ i))) + table) + "Cyrillic ALTERNATIVNYJ encoding table.") + +) + + (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 @@ -169,46 +205,40 @@ (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]) - ))))) + (write-read-repeat r0 ,cyrillic-alternativnyj-encode-table)))))) "CCL program to encode Alternativnyj.") (make-coding-system 'cyrillic-alternativnyj 4 ?A "ALTERNATIVNYJ 8-bit encoding for Cyrillic" '(ccl-decode-alternativnyj . ccl-encode-alternativnyj) - '((safe-charsets ascii cyrillic-iso8859-5))) + '((safe-charsets ascii cyrillic-iso8859-5) + (valid-codes (0 175) (224 241) 255))) (define-coding-system-alias 'alternativnyj 'cyrillic-alternativnyj) (define-ccl-program ccl-encode-alternativnyj-font '(0 - ((r1 -= 32) - (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) (charset cyrillic-iso8859-5) + (nonascii-translation-table + . cyrillic-alternativnyj-nonascii-translation-table) + (charset-origin-alist + (cyrillic-iso8859-5 "ALTERNATIVNYJ" + cyrillic-encode-koi8-char)) (coding-system cyrillic-alternativnyj) (coding-priority cyrillic-alternativnyj) (sample-text . "Russian (,L@caaZXY(B) ,L7T`PRabRcYbU(B!")