Contents of release-21-2 in 1999-06-17-23.
[chise/xemacs-chise.git.1] / lisp / mule / vietnamese.el
1 ;;; vietnamese.el --- Support for Vietnamese
2
3 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
4 ;; Licensed to the Free Software Foundation.
5 ;; Copyright (C) 1997 MORIOKA Tomohiko
6
7 ;; Keywords: 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,2{\e(B ?\e,2x\e(B ?\e,2O\e(B
46    ?\e,2u\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,2`\e(B ?\e,2a\e(B ?\e,2b\e(B ?\e,2c\e(B ?\e,2d\e(B ?\e,2e\e(B ?\e,1F\e(B ?\e,1G\e(B ?\e,2h\e(B ?\e,2i\e(B ?\e,2j\e(B ?\e,2k\e(B ?\e,2l\e(B ?\e,2m\e(B ?\e,2n\e(B ?\e,1O\e(B
49    ?\e,2p\e(B ?\e,1Q\e(B ?\e,2r\e(B ?\e,2s\e(B ?\e,2t\e(B ?\e,1U\e(B ?\e,1V\e(B ?\e,1W\e(B ?\e,1X\e(B ?\e,2y\e(B ?\e,2z\e(B ?\e,1[\e(B ?\e,1\\e(B ?\e,2}\e(B ?\e,1^\e(B ?\e,1_\e(B
50    ?\e,1`\e(B ?\e,1a\e(B ?\e,1b\e(B ?\e,1c\e(B ?\e,1d\e(B ?\e,1e\e(B ?\e,1f\e(B ?\e,1g\e(B ?\e,1h\e(B ?\e,1i\e(B ?\e,1j\e(B ?\e,1k\e(B ?\e,1l\e(B ?\e,1m\e(B ?\e,1n\e(B ?\e,1o\e(B
51    ?\e,1p\e(B ?\e,1q\e(B ?\e,1r\e(B ?\e,1s\e(B ?\e,1t\e(B ?\e,1u\e(B ?\e,1v\e(B ?\e,1w\e(B ?\e,1x\e(B ?\e,1y\e(B ?\e,1z\e(B ?\e,1{\e(B ?\e,1|\e(B ?\e,1}\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,2z\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,2}\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,2`\e(B ?\e,2d\e(B ?\e,2c\e(B ?\e,2a\e(B ?\e,2U\e(B ?\e,2#\e(B ?\e,2'\e(B ?\e,2h\e(B ?\e,2k\e(B ?\e,2(\e(B ?\e,2i\e(B ?\e,2)\e(B ?\e,2.\e(B ?\e,2l\e(B ?\e,2o\e(B ?\e,2n\e(B
83    ?\e,2m\e(B ?\e,28\e(B ?\e,2r\e(B ?\e,2v\e(B ?\e,2u\e(B ?\e,2s\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,2y\e(B ?\e,2|\e(B ?\e,2{\e(B
84    160 ?\e,2e\e(B ?\e,2b\e(B ?\e,2j\e(B ?\e,2t\e(B ?\e,2=\e(B ?\e,2_\e(B ?\e,2p\e(B ?\e,1e\e(B ?\e,1b\e(B ?\e,1j\e(B ?\e,1t\e(B ?\e,1>\e(B ?\e,1y\e(B ?\e,1p\e(B ?\e,2"\e(B
85    192 193 194 195 196 ?\e,1`\e(B ?\e,1d\e(B ?\e,1c\e(B ?\e,1a\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,1h\e(B ?\e,2,\e(B ?\e,1k\e(B ?\e,1(\e(B
87    ?\e,1i\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,1l\e(B ?\e,1o\e(B ?\e,2-\e(B ?\e,2*\e(B ?\e,20\e(B ?\e,1n\e(B ?\e,1m\e(B ?\e,18\e(B ?\e,1r\e(B
88    ?\e,21\e(B ?\e,1v\e(B ?\e,1u\e(B ?\e,1s\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,1y\e(B
89    ?\e,22\e(B ?\e,1|\e(B ?\e,1{\e(B ?\e,1z\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,1}\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 (defvar leading-code-private-11 #x9E)
126
127 (define-ccl-program ccl-encode-viscii
128   `(1
129      ((read r0)
130       (loop
131        (if (r0 < 128)
132            ;; ASCII
133            (write-read-repeat r0)
134          ;; not ASCII
135          (if (r0 != ,leading-code-private-11)
136              ;; not Vietnamese
137              (write-read-repeat r0)
138            ((read-if (r0 == ,(charset-id 'vietnamese-viscii-lower))
139              (;; Vietnamese lower
140               (read r0)
141               (r0 -= 128)
142               (write-read-repeat r0 ,(car viet-viscii-encode-table)))
143              (if (r0 == ,(charset-id 'vietnamese-viscii-upper))
144                  (;; Vietnamese upper
145                   (read r0)
146                   (r0 -= 128)
147                   (write-read-repeat r0 ,(cdr viet-viscii-encode-table)))
148                ;; not Vietnamese
149                (write-read-repeat r0)))))))))
150   "CCL program to encode VISCII 1.1")
151
152 (define-ccl-program ccl-encode-viscii-font
153   `(0
154     ;; In:  R0:vietnamese-viscii-lower/vietnamese-viscii-upper
155     ;;      R1:position code
156     ;; Out: R1:font code point
157     (if (r0 == ,(charset-id 'vietnamese-viscii-lower))
158         (r1 = r1 ,(car viet-viscii-encode-table))
159       (r1 = r1 ,(cdr viet-viscii-encode-table)))
160     )
161   "CCL program to encode Vietnamese chars to VISCII 1.1 font")
162
163 (define-ccl-program ccl-decode-vscii
164   `(3
165     ((read r0)
166      (loop
167       (write-read-repeat r0 ,viet-vscii-decode-table))
168      ))
169   "CCL program to decode VSCII-1.")
170
171 (define-ccl-program ccl-encode-vscii
172   `(1
173     ((read r0)
174      (loop
175       (if (r0 < 128)
176           ;; ASCII
177           (write-read-repeat r0)
178         ;; not ASCII 
179         (if (r0 != ,leading-code-private-11)
180             ;; not Vietnamese
181             (write-read-repeat r0)
182           (read-if (r0 == ,(charset-id 'vietnamese-viscii-lower))
183                    (;; Vietnamese lower
184                     (read r0)
185                     (r0 -= 128)
186                     (write-read-repeat r0 ,(car viet-vscii-encode-table)))
187                    (if (r0 == ,(charset-id 'vietnamese-viscii-upper))
188                        (;; Vietnamese upper
189                         (read r0)
190                         (r0 -= 128)
191                         (write-read-repeat r0 ,(cdr viet-viscii-encode-table)))
192                      ;; not Vietnamese
193                      (write-read-repeat r0))))))))
194   "CCL program to encode VSCII-1.")
195
196 (define-ccl-program ccl-encode-vscii-font
197   `(0
198     ;; In:  R0:vietnamese-viscii-lower/vietnamese-viscii-upper
199     ;;      R1:position code
200     ;; Out: R1:font code point
201     (if (r0 == ,(charset-id 'vietnamese-viscii-lower))
202         (r1 = r1 ,(car viet-vscii-encode-table))
203       (r1 = r1 ,(cdr viet-vscii-encode-table)))
204     )
205   "CCL program to encode Vietnamese chars to VSCII-1 font.")
206
207
208 (make-coding-system
209  'viscii 'ccl
210  "Coding-system used for VISCII 1.1."
211  `(mnemonic "VISCII"
212    decode ,ccl-decode-viscii
213    encode ,ccl-encode-viscii))
214
215 ;; (make-coding-system
216 ;;  'vietnamese-viscii 4 ?V
217 ;;  "8-bit encoding for Vietnamese VISCII 1.1 (MIME:VISCII)"
218 ;;  (cons ccl-decode-viscii ccl-encode-viscii))
219
220 ;; (define-coding-system-alias 'viscii 'vietnamese-viscii)
221
222 (make-coding-system
223  'vscii 'ccl
224  "Coding-system used for VSCII 1.1."
225  `(mnemonic "VSCII"
226    decode ,ccl-decode-vscii
227    encode ,ccl-encode-vscii))
228
229 ;; (make-coding-system
230 ;;  'vietnamese-vscii 4 ?v
231 ;;  "8-bit encoding for Vietnamese VSCII-1"
232 ;;  (cons ccl-decode-vscii ccl-encode-vscii))
233
234 ;; (define-coding-system-alias 'vscii 'vietnamese-vscii)
235
236 (make-coding-system
237  'viqr 'no-conversion
238  "Coding-system used for VIQR."
239  '(mnemonic "VIQR"
240    eol-type lf
241    post-read-conversion viqr-post-read-conversion
242    pre-write-conversion viqr-pre-write-conversion))
243
244 ;; (make-coding-system
245 ;;  'vietnamese-viqr 0 ?q
246 ;;  "Vietnamese latin transcription (VIQR)"
247 ;;  nil)
248 ;; (put 'vietnamese-viqr 'post-read-conversion 'viqr-post-read-conversion)
249 ;; (put 'vietnamese-viqr 'pre-write-conversion 'viqr-pre-write-conversion)
250
251 ;; (define-coding-system-alias 'viqr 'vietnamese-viqr)
252
253 ;; For VISCII users
254 (set-charset-ccl-program 'vietnamese-viscii-lower
255                          ccl-encode-viscii-font)
256 (set-charset-ccl-program 'vietnamese-viscii-upper
257                          ccl-encode-viscii-font)
258 ;; For VSCII users
259 (set-charset-ccl-program 'vietnamese-viscii-lower ccl-encode-vscii-font)
260 (set-charset-ccl-program 'vietnamese-viscii-upper ccl-encode-vscii-font)
261
262 ;; (setq font-ccl-encoder-alist
263 ;;       (cons (cons "viscii" ccl-encode-viscii-font) font-ccl-encoder-alist))
264
265 ;; (setq font-ccl-encoder-alist
266 ;;       (cons (cons "vscii" ccl-encode-vscii-font) font-ccl-encoder-alist))
267
268 (set-language-info-alist
269  "Vietnamese" '((setup-function . setup-vietnamese-environment)
270                 (charset . (vietnamese-viscii-lower
271                             vietnamese-viscii-upper))
272                 (coding-system . (viscii vscii viqr))
273                 (sample-text . "Vietnamese (Ti\e,1*\e(Bng Vi\e,1.\e(Bt)     Ch\e,1`\e(Bo b\e,1U\e(Bn")
274                 (documentation . "\
275 For Vietnamese, Emacs uses special charasets internally.
276 They can be decoded from and encoded to VISCC, VSCII, and VIQR.")
277                 ))
278
279 ;;; vietnamese.el ends here