]> git.eshelyaron.com Git - emacs.git/commitdiff
(cyrillic-koi8-r-decode-table): New
authorKenichi Handa <handa@m17n.org>
Sun, 2 Aug 1998 01:06:57 +0000 (01:06 +0000)
committerKenichi Handa <handa@m17n.org>
Sun, 2 Aug 1998 01:06:57 +0000 (01:06 +0000)
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.

lisp/language/cyrillic.el

index 924b8aa826e9fd4c7cb887b3189f8069b3490351..22cf312d64c4a2b05eedfd47331760c9caa7d7a2 100644 (file)
 
 ;; 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 ?\e,Lq\e(B   32  32  32  32  32  32  32  32  32  32  32  32
+   32  32  32 ?\e,L!\e(B   32  32  32  32  32  32  32  32  32  32  32  32
+   ?\e,Ln\e(B  ?\e,LP\e(B  ?\e,LQ\e(B  ?\e,Lf\e(B  ?\e,LT\e(B  ?\e,LU\e(B  ?\e,Ld\e(B  ?\e,LS\e(B  ?\e,Le\e(B  ?\e,LX\e(B  ?\e,LY\e(B  ?\e,LZ\e(B  ?\e,L[\e(B  ?\e,L\\e(B  ?\e,L]\e(B  ?\e,L^\e(B 
+   ?\e,L_\e(B  ?\e,Lo\e(B  ?\e,L`\e(B  ?\e,La\e(B  ?\e,Lb\e(B  ?\e,Lc\e(B  ?\e,LV\e(B  ?\e,LR\e(B  ?\e,Ll\e(B  ?\e,Lk\e(B  ?\e,LW\e(B  ?\e,Lh\e(B  ?\e,Lm\e(B  ?\e,Li\e(B  ?\e,Lg\e(B  ?\e,Lj\e(B 
+   ?\e,LN\e(B  ?\e,L0\e(B  ?\e,L1\e(B  ?\e,LF\e(B  ?\e,L4\e(B  ?\e,L5\e(B  ?\e,LD\e(B  ?\e,L3\e(B  ?\e,LE\e(B  ?\e,L8\e(B  ?\e,L9\e(B  ?\e,L:\e(B  ?\e,L;\e(B  ?\e,L<\e(B  ?\e,L=\e(B  ?\e,L>\e(B 
+   ?\e,L?\e(B  ?\e,LO\e(B  ?\e,L@\e(B  ?\e,LA\e(B  ?\e,LB\e(B  ?\e,LC\e(B  ?\e,L6\e(B  ?\e,L2\e(B  ?\e,LL\e(B  ?\e,LK\e(B  ?\e,L7\e(B  ?\e,LH\e(B  ?\e,LM\e(B  ?\e,LI\e(B  ?\e,LG\e(B  ?\e,LJ\e(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 ?\e,Lq\e(B   32  32  32  32  32  32  32  32  32  32  32  32
-         32  32  32 ?\e,L!\e(B   32  32  32  32  32  32  32  32  32  32  32  32
-         ?\e,Ln\e(B  ?\e,LP\e(B  ?\e,LQ\e(B  ?\e,Lf\e(B  ?\e,LT\e(B  ?\e,LU\e(B  ?\e,Ld\e(B  ?\e,LS\e(B  ?\e,Le\e(B  ?\e,LX\e(B  ?\e,LY\e(B  ?\e,LZ\e(B  ?\e,L[\e(B  ?\e,L\\e(B  ?\e,L]\e(B  ?\e,L^\e(B 
-         ?\e,L_\e(B  ?\e,Lo\e(B  ?\e,L`\e(B  ?\e,La\e(B  ?\e,Lb\e(B  ?\e,Lc\e(B  ?\e,LV\e(B  ?\e,LR\e(B  ?\e,Ll\e(B  ?\e,Lk\e(B  ?\e,LW\e(B  ?\e,Lh\e(B  ?\e,Lm\e(B  ?\e,Li\e(B  ?\e,Lg\e(B  ?\e,Lj\e(B 
-         ?\e,LN\e(B  ?\e,L0\e(B  ?\e,L1\e(B  ?\e,LF\e(B  ?\e,L4\e(B  ?\e,L5\e(B  ?\e,LD\e(B  ?\e,L3\e(B  ?\e,LE\e(B  ?\e,L8\e(B  ?\e,L9\e(B  ?\e,L:\e(B  ?\e,L;\e(B  ?\e,L<\e(B  ?\e,L=\e(B  ?\e,L>\e(B 
-         ?\e,L?\e(B  ?\e,LO\e(B  ?\e,L@\e(B  ?\e,LA\e(B  ?\e,LB\e(B  ?\e,LC\e(B  ?\e,L6\e(B  ?\e,L2\e(B  ?\e,LL\e(B  ?\e,LK\e(B  ?\e,L7\e(B  ?\e,LH\e(B  ?\e,LM\e(B  ?\e,LI\e(B  ?\e,LG\e(B  ?\e,LJ\e(B ]))))
+      (write-read-repeat r0 ,cyrillic-koi8-r-decode-table))))
   "CCL program to decode KOI8.")
 
 (define-ccl-program ccl-encode-koi8
       (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
  ?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 (\e,L@caaZXY\e(B)      \e,L7T`PRabRcYbU\e(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
+   ?\e,L0\e(B  ?\e,L1\e(B  ?\e,L2\e(B  ?\e,L3\e(B  ?\e,L4\e(B  ?\e,L5\e(B  ?\e,L6\e(B  ?\e,L7\e(B  ?\e,L8\e(B  ?\e,L9\e(B  ?\e,L:\e(B  ?\e,L;\e(B  ?\e,L<\e(B  ?\e,L=\e(B  ?\e,L>\e(B  ?\e,L?\e(B
+   ?\e,L@\e(B  ?\e,LA\e(B  ?\e,LB\e(B  ?\e,LC\e(B  ?\e,LD\e(B  ?\e,LE\e(B  ?\e,LF\e(B  ?\e,LG\e(B  ?\e,LH\e(B  ?\e,LI\e(B  ?\e,LJ\e(B  ?\e,LK\e(B  ?\e,LL\e(B  ?\e,LM\e(B  ?\e,LN\e(B  ?\e,LO\e(B
+   ?\e,LP\e(B  ?\e,LQ\e(B  ?\e,LR\e(B  ?\e,LS\e(B  ?\e,LT\e(B  ?\e,LU\e(B  ?\e,LV\e(B  ?\e,LW\e(B  ?\e,LX\e(B  ?\e,LY\e(B  ?\e,LZ\e(B  ?\e,L[\e(B  ?\e,L\\e(B  ?\e,L]\e(B  ?\e,L^\e(B  ?\e,L_\e(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
+   ?\e,L`\e(B  ?\e,La\e(B  ?\e,Lb\e(B  ?\e,Lc\e(B  ?\e,Ld\e(B  ?\e,Le\e(B  ?\e,Lf\e(B  ?\e,Lg\e(B  ?\e,Lh\e(B  ?\e,Li\e(B  ?\e,Lj\e(B  ?\e,Lk\e(B  ?\e,Ll\e(B  ?\e,Lm\e(B  ?\e,Ln\e(B  ?\e,Lo\e(B
+   ?\e,L!\e(B  ?\e,Lq\e(B   32  32  32  32  32  32  32  32  32  32  32  32  32 ?\e,Lp\e(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
-        ?\e,L0\e(B  ?\e,L1\e(B  ?\e,L2\e(B  ?\e,L3\e(B  ?\e,L4\e(B  ?\e,L5\e(B  ?\e,L6\e(B  ?\e,L7\e(B  ?\e,L8\e(B  ?\e,L9\e(B  ?\e,L:\e(B  ?\e,L;\e(B  ?\e,L<\e(B  ?\e,L=\e(B  ?\e,L>\e(B  ?\e,L?\e(B
-        ?\e,L@\e(B  ?\e,LA\e(B  ?\e,LB\e(B  ?\e,LC\e(B  ?\e,LD\e(B  ?\e,LE\e(B  ?\e,LF\e(B  ?\e,LG\e(B  ?\e,LH\e(B  ?\e,LI\e(B  ?\e,LJ\e(B  ?\e,LK\e(B  ?\e,LL\e(B  ?\e,LM\e(B  ?\e,LN\e(B  ?\e,LO\e(B
-        ?\e,LP\e(B  ?\e,LQ\e(B  ?\e,LR\e(B  ?\e,LS\e(B  ?\e,LT\e(B  ?\e,LU\e(B  ?\e,LV\e(B  ?\e,LW\e(B  ?\e,LX\e(B  ?\e,LY\e(B  ?\e,LZ\e(B  ?\e,L[\e(B  ?\e,L\\e(B  ?\e,L]\e(B  ?\e,L^\e(B  ?\e,L_\e(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
-        ?\e,L`\e(B  ?\e,La\e(B  ?\e,Lb\e(B  ?\e,Lc\e(B  ?\e,Ld\e(B  ?\e,Le\e(B  ?\e,Lf\e(B  ?\e,Lg\e(B  ?\e,Lh\e(B  ?\e,Li\e(B  ?\e,Lj\e(B  ?\e,Lk\e(B  ?\e,Ll\e(B  ?\e,Lm\e(B  ?\e,Ln\e(B  ?\e,Lo\e(B
-        ?\e,L!\e(B  ?\e,Lq\e(B   32  32  32  32  32  32  32  32  32  32  32  32  32 ?\e,Lp\e(B]))))
+      (write-read-repeat r0 ,cyrillic-alternativnyj-decode-table))))
   "CCL program to decode Alternativnyj.")
 
 (define-ccl-program ccl-encode-alternativnyj
       (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 (\e,L@caaZXY\e(B)       \e,L7T`PRabRcYbU\e(B!")