(GT-00010): Separate U+624D, G0-3245 and C1-445F; use
[chise/xemacs-chise.git] / lisp / mule / viet-ccl.el
1 ;;; viet-ccl.el --- CCL codes for Vietnamese -*- coding: iso-2022-7bit; -*-
2
3 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
4 ;; Licensed to the Free Software Foundation.
5 ;; Copyright (C) 1997,2000 MORIOKA Tomohiko
6
7 ;; Keywords: CCL, MULE, multilingual, Vietnamese
8
9 ;; This file is part of XEmacs.
10
11 ;; XEmacs is free software; you can redistribute it and/or modify it
12 ;; under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either version 2, or (at your option)
14 ;; any later version.
15
16 ;; XEmacs is distributed in the hope that it will be useful, but
17 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19 ;; General Public License for more details.
20
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with XEmacs; see the file COPYING.  If not, write to the Free
23 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
24 ;; 02111-1307, USA.
25
26 ;;; Commentary:
27
28 ;; For Vietnames, the character sets VISCII and VSCII are supported.
29
30 ;;; Code:
31
32 (eval-and-compile
33
34 (defvar viet-viscii-decode-table
35   [;; VISCII is a full 8-bit code.
36    0 1 ?\e,2F\e(B 3 4 ?\e,2G\e(B ?\e,2g\e(B 7 8 9 10 11 12 13 14 15
37    16 17 18 19 ?\e,2V\e(B 21 22 23 24 ?\e,2[\e(B 26 27 28 29 ?\e,2\\e(B 31
38    32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
39    48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
40    64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
41    80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
42    96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
43    112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 
44    ?\e,2U\e(B ?\e,2!\e(B ?\e,2"\e(B ?\e,2#\e(B ?\e,2$\e(B ?\e,2%\e(B ?\e,2&\e(B ?\e,2'\e(B ?\e,2(\e(B ?\e,2)\e(B ?\e,2*\e(B ?\e,2+\e(B ?\e,2,\e(B ?\e,2-\e(B ?\e,2.\e(B ?\e,2/\e(B
45    ?\e,20\e(B ?\e,21\e(B ?\e,22\e(B ?\e,25\e(B ?\e,2~\e(B ?\e,2>\e(B ?\e,26\e(B ?\e,27\e(B ?\e,28\e(B ?\e,2v\e(B ?\e,2w\e(B ?\e,2o\e(B ?\e,2|\e(B ?\e,D]\e(B ?\e,2x\e(B ?\e,2O\e(B
46    ?\e,AU\e(B ?\e,1!\e(B ?\e,1"\e(B ?\e,1#\e(B ?\e,1$\e(B ?\e,1%\e(B ?\e,1&\e(B ?\e,1'\e(B ?\e,1(\e(B ?\e,1)\e(B ?\e,1*\e(B ?\e,1+\e(B ?\e,1,\e(B ?\e,1-\e(B ?\e,1.\e(B ?\e,1/\e(B
47    ?\e,10\e(B ?\e,11\e(B ?\e,12\e(B ?\e,2^\e(B ?\e,2=\e(B ?\e,15\e(B ?\e,16\e(B ?\e,17\e(B ?\e,18\e(B ?\e,2q\e(B ?\e,2Q\e(B ?\e,2W\e(B ?\e,2X\e(B ?\e,1=\e(B ?\e,1>\e(B ?\e,2_\e(B
48    ?\e,A@\e(B ?\e,AA\e(B ?\e,AB\e(B ?\e,AC\e(B ?\e,2d\e(B ?\e,BC\e(B ?\e,1F\e(B ?\e,1G\e(B ?\e,AH\e(B ?\e,AI\e(B ?\e,AJ\e(B ?\e,2k\e(B ?\e,AL\e(B ?\e,AM\e(B ?\e,D%\e(B ?\e,1O\e(B
49    ?\e,BP\e(B ?\e,1Q\e(B ?\e,AR\e(B ?\e,AS\e(B ?\e,AT\e(B ?\e,1U\e(B ?\e,1V\e(B ?\e,1W\e(B ?\e,1X\e(B ?\e,AY\e(B ?\e,AZ\e(B ?\e,1[\e(B ?\e,1\\e(B ?\e,A]\e(B ?\e,1^\e(B ?\e,1_\e(B
50    ?\e,A`\e(B ?\e,Aa\e(B ?\e,Ab\e(B ?\e,Ac\e(B ?\e,1d\e(B ?\e,Bc\e(B ?\e,1f\e(B ?\e,1g\e(B ?\e,Ah\e(B ?\e,Ai\e(B ?\e,Aj\e(B ?\e,1k\e(B ?\e,Al\e(B ?\e,Am\e(B ?\e,D5\e(B ?\e,1o\e(B
51    ?\e,Bp\e(B ?\e,1q\e(B ?\e,Ar\e(B ?\e,As\e(B ?\e,At\e(B ?\e,Au\e(B ?\e,1v\e(B ?\e,1w\e(B ?\e,1x\e(B ?\e,Ay\e(B ?\e,Az\e(B ?\e,D}\e(B ?\e,1|\e(B ?\e,A}\e(B ?\e,1~\e(B ?\e,2f\e(B ]
52   "Vietnamese VISCII decoding table.")
53
54 (defvar viet-viscii-encode-table
55   (let ((table-lower (make-vector 128 0))
56         (table-upper (make-vector 128 0))
57         (i 0)
58         char-component)
59     (while (< i 256)
60       (setq char-component
61             (split-char (aref viet-viscii-decode-table i)))
62       (cond ((eq (car char-component) 'vietnamese-viscii-lower)
63              (aset table-lower (nth 1 char-component) i))
64             ((eq (car char-component) 'vietnamese-viscii-upper)
65              (aset table-upper (nth 1 char-component) i)))
66       (setq i (1+ i)))
67     (cons table-lower table-upper))
68   "Vietnamese VISCII encoding table.
69 Cons of tables for encoding lower-case chars and upper-case characters.
70 Both tables are indexed by the position code of Vietnamese characters.")
71
72 (defvar viet-vscii-decode-table
73   [;; VSCII is a full 8-bit code.
74    0 ?\e,AZ\e(B ?\e,2x\e(B 3 ?\e,2W\e(B ?\e,2X\e(B ?\e,2f\e(B 7 8 9 10 11 12 13 14 15
75    16 ?\e,2Q\e(B ?\e,2_\e(B ?\e,2O\e(B ?\e,2V\e(B ?\e,2[\e(B ?\e,A]\e(B ?\e,2\\e(B 24 25 26 27 28 29 30 31
76    32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
77    48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
78    64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
79    80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
80    96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
81    112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 
82    ?\e,A@\e(B ?\e,2d\e(B ?\e,AC\e(B ?\e,AA\e(B ?\e,2U\e(B ?\e,2#\e(B ?\e,2'\e(B ?\e,AH\e(B ?\e,2k\e(B ?\e,2(\e(B ?\e,AI\e(B ?\e,2)\e(B ?\e,2.\e(B ?\e,AL\e(B ?\e,2o\e(B ?\e,D%\e(B
83    ?\e,AM\e(B ?\e,28\e(B ?\e,AR\e(B ?\e,2v\e(B ?\e,AU\e(B ?\e,AS\e(B ?\e,2w\e(B ?\e,25\e(B ?\e,26\e(B ?\e,27\e(B ?\e,2^\e(B ?\e,2>\e(B ?\e,2~\e(B ?\e,AY\e(B ?\e,2|\e(B ?\e,D]\e(B
84    160 ?\e,BC\e(B ?\e,AB\e(B ?\e,AJ\e(B ?\e,AT\e(B ?\e,2=\e(B ?\e,2_\e(B ?\e,BP\e(B ?\e,Bc\e(B ?\e,Ab\e(B ?\e,Aj\e(B ?\e,At\e(B ?\e,1>\e(B ?\e,Ay\e(B ?\e,Bp\e(B ?\e,2"\e(B
85    192 193 194 195 196 ?\e,A`\e(B ?\e,1d\e(B ?\e,Ac\e(B ?\e,Aa\e(B ?\e,1U\e(B ?\e,2F\e(B ?\e,1"\e(B ?\e,1F\e(B ?\e,1G\e(B ?\e,1!\e(B ?\e,2G\e(B
86    ?\e,2!\e(B ?\e,2%\e(B ?\e,2&\e(B ?\e,2g\e(B ?\e,2%\e(B ?\e,2+\e(B ?\e,1#\e(B ?\e,1%\e(B ?\e,1&\e(B ?\e,1g\e(B ?\e,1$\e(B ?\e,1'\e(B ?\e,Ah\e(B ?\e,2,\e(B ?\e,1k\e(B ?\e,1(\e(B
87    ?\e,Ai\e(B ?\e,1)\e(B ?\e,1+\e(B ?\e,1,\e(B ?\e,1-\e(B ?\e,1*\e(B ?\e,1.\e(B ?\e,Al\e(B ?\e,1o\e(B ?\e,2-\e(B ?\e,2*\e(B ?\e,20\e(B ?\e,D5\e(B ?\e,Am\e(B ?\e,18\e(B ?\e,Ar\e(B
88    ?\e,21\e(B ?\e,1v\e(B ?\e,Au\e(B ?\e,As\e(B ?\e,1w\e(B ?\e,10\e(B ?\e,11\e(B ?\e,12\e(B ?\e,1/\e(B ?\e,15\e(B ?\e,16\e(B ?\e,17\e(B ?\e,1^\e(B ?\e,1>\e(B ?\e,1~\e(B ?\e,Ay\e(B
89    ?\e,22\e(B ?\e,1|\e(B ?\e,D}\e(B ?\e,Az\e(B ?\e,1x\e(B ?\e,1W\e(B ?\e,1X\e(B ?\e,1f\e(B ?\e,1Q\e(B ?\e,1q\e(B ?\e,1O\e(B ?\e,1V\e(B ?\e,1[\e(B ?\e,A}\e(B ?\e,1\\e(B ?\e,2/\e(B]
90   "Vietnamese VSCII decoding table.")
91
92 (defvar viet-vscii-encode-table
93   (let ((table-lower (make-vector 128 0))
94         (table-upper (make-vector 128 0))
95         (i 0)
96         char-component)
97     (while (< i 256)
98       (setq char-component
99             (split-char (aref viet-vscii-decode-table i)))
100       (cond ((eq (car char-component) 'vietnamese-viscii-lower)
101              (aset table-lower (nth 1 char-component) i))
102             ((eq (car char-component) 'vietnamese-viscii-upper)
103              (aset table-upper (nth 1 char-component) i)))
104       (setq i (1+ i)))
105     (cons table-lower table-upper))
106   "Vietnamese VSCII encoding table.
107 Cons of tables for encoding lower-case chars and upper-case characters.
108 Both tables are indexed by the position code of Vietnamese characters.")
109
110 )
111
112 (define-ccl-program ccl-decode-viscii
113   `(3
114     ((read r0)
115      (loop
116       (write-read-repeat r0 ,viet-viscii-decode-table))
117      ))
118   "CCL program to decode VISCII 1.1")
119
120 ;; Multibyte form of a Vietnamese character is as follows (3-byte):
121 ;;   LEADING-CODE-PRIVATE-11 LEADING-CODE-EXTENDED-11 POSITION-CODE
122 ;; where LEADING-CODE-EXTENDED-11 for Vietnamese is
123 ;; `vietnamese-viscii-lower' or `vietnamese-viscii-upper'.
124
125 (define-ccl-program ccl-encode-viscii
126   `(1
127      ((read r0)
128       (loop
129        (if (r0 < 128)
130            ;; ASCII
131            (write-read-repeat r0)
132          ;; not ASCII
133          (if (r0 != ,leading-code-private-11)
134              ;; not Vietnamese
135              (write-read-repeat r0)
136            ((read-if (r0 == ,(charset-id 'vietnamese-viscii-lower))
137              (;; Vietnamese lower
138               (read r0)
139               (r0 -= 128)
140               (write-read-repeat r0 ,(car viet-viscii-encode-table)))
141              (if (r0 == ,(charset-id 'vietnamese-viscii-upper))
142                  (;; Vietnamese upper
143                   (read r0)
144                   (r0 -= 128)
145                   (write-read-repeat r0 ,(cdr viet-viscii-encode-table)))
146                ;; not Vietnamese
147                (write-read-repeat r0)))))))))
148   "CCL program to encode VISCII 1.1")
149
150 (define-ccl-program ccl-encode-viscii-font
151   `(0
152     ;; In:  R0:vietnamese-viscii-lower/vietnamese-viscii-upper
153     ;;      R1:position code
154     ;; Out: R1:font code point
155     (if (r0 == ,(charset-id 'vietnamese-viscii-lower))
156         (r1 = r1 ,(car viet-viscii-encode-table))
157       (r1 = r1 ,(cdr viet-viscii-encode-table)))
158     )
159   "CCL program to encode Vietnamese chars to VISCII 1.1 font")
160
161 (define-ccl-program ccl-decode-vscii
162   `(3
163     ((read r0)
164      (loop
165       (write-read-repeat r0 ,viet-vscii-decode-table))
166      ))
167   "CCL program to decode VSCII-1.")
168
169 (define-ccl-program ccl-encode-vscii
170   `(1
171     ((read r0)
172      (loop
173       (if (r0 < 128)
174           ;; ASCII
175           (write-read-repeat r0)
176         ;; not ASCII 
177         (if (r0 != ,leading-code-private-11)
178             ;; not Vietnamese
179             (write-read-repeat r0)
180           (read-if (r0 == ,(charset-id 'vietnamese-viscii-lower))
181                    (;; Vietnamese lower
182                     (read r0)
183                     (r0 -= 128)
184                     (write-read-repeat r0 ,(car viet-vscii-encode-table)))
185                    (if (r0 == ,(charset-id 'vietnamese-viscii-upper))
186                        (;; Vietnamese upper
187                         (read r0)
188                         (r0 -= 128)
189                         (write-read-repeat r0 ,(cdr viet-vscii-encode-table)))
190                      ;; not Vietnamese
191                      (write-read-repeat r0))))))))
192   "CCL program to encode VSCII-1.")
193
194 (define-ccl-program ccl-encode-vscii-font
195   `(0
196     ;; In:  R0:vietnamese-viscii-lower/vietnamese-viscii-upper
197     ;;      R1:position code
198     ;; Out: R1:font code point
199     (if (r0 == ,(charset-id 'vietnamese-viscii-lower))
200         (r1 = r1 ,(car viet-vscii-encode-table))
201       (r1 = r1 ,(cdr viet-vscii-encode-table)))
202     )
203   "CCL program to encode Vietnamese chars to VSCII-1 font.")
204
205
206 (make-coding-system
207  'viscii 'ccl
208  "Coding-system used for VISCII 1.1."
209  `(mnemonic "VISCII"
210    decode ccl-decode-viscii
211    encode ccl-encode-viscii))
212
213 ;; it is not correct, but XEmacs doesn't have `ccl' category...
214 (coding-system-put 'viscii 'category 'iso-8-1)
215
216 ;; (make-coding-system
217 ;;  'vietnamese-viscii 4 ?V
218 ;;  "8-bit encoding for Vietnamese VISCII 1.1 (MIME:VISCII)"
219 ;;  '(ccl-decode-viscii . ccl-encode-viscii)
220 ;;  '((safe-charsets ascii vietnamese-viscii-lower vietnamese-viscii-upper)
221 ;;    (mime-charset . viscii)
222 ;;    (valid-codes (0 . 255))))
223
224 ;; (define-coding-system-alias 'viscii 'vietnamese-viscii)
225
226 (make-coding-system
227  'vscii 'ccl
228  "Coding-system used for VSCII 1.1."
229  `(mnemonic "VSCII"
230    decode ccl-decode-vscii
231    encode ccl-encode-vscii))
232
233 ;; (make-coding-system
234 ;;  'vietnamese-vscii 4 ?v
235 ;;  "8-bit encoding for Vietnamese VSCII-1"
236 ;;  '(ccl-decode-vscii . ccl-encode-vscii)
237 ;;  '((safe-charsets ascii vietnamese-viscii-lower vietnamese-viscii-upper)
238 ;;    (valid-codes (0 . 255))))
239
240 ;; (define-coding-system-alias 'vscii 'vietnamese-vscii)
241
242 ;; For VISCII users
243 (set-charset-ccl-program 'vietnamese-viscii-lower
244                          'ccl-encode-viscii-font)
245 (set-charset-ccl-program 'vietnamese-viscii-upper
246                          'ccl-encode-viscii-font)
247 ;; For VSCII users
248 (set-charset-ccl-program 'vietnamese-viscii-lower 'ccl-encode-vscii-font)
249 (set-charset-ccl-program 'vietnamese-viscii-upper 'ccl-encode-vscii-font)
250
251 ;; (setq font-ccl-encoder-alist
252 ;;       (cons (cons "viscii" ccl-encode-viscii-font) font-ccl-encoder-alist))
253
254 ;; (setq font-ccl-encoder-alist
255 ;;       (cons (cons "vscii" ccl-encode-vscii-font) font-ccl-encoder-alist))
256
257 ;; (defvar viet-viscii-nonascii-translation-table
258 ;;   (make-translation-table-from-vector viet-viscii-decode-table)
259 ;;   "Value of `nonascii-translation-table' in Vietnamese language environment.")
260
261 ;;; viet-ccl.el ends here