comparison lisp/language/vietnamese.el @ 159:3bb7ccffb0c0 r20-3b6

Import from CVS: tag r20-3b6
author cvs
date Mon, 13 Aug 2007 09:41:43 +0200
parents
children acd284d43ca1
comparison
equal deleted inserted replaced
158:558dfa75ffb3 159:3bb7ccffb0c0
1 ;;; vietnamese.el --- Support for Vietnamese
2
3 ;; Copyright (C) 1995 Free Software Foundation, Inc.
4 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
5
6 ;; Keywords: multilingual, Vietnamese
7
8 ;; This file is part of GNU Emacs.
9
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
14
15 ;; GNU Emacs is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
24
25 ;;; Commentary:
26
27 ;; For Vietnames, the character sets VISCII and VSCII are supported.
28
29 ;;; Code:
30
31 (eval-when-compile
32
33 (defvar viet-viscii-decode-table
34 [;; VISCII is a full 8-bit code.
35 0 1 ?,2F(B 3 4 ?,2G(B ?,2g(B 7 8 9 10 11 12 13 14 15
36 16 17 18 19 ?,2V(B 21 22 23 24 ?,2[(B 26 27 28 29 ?,2\(B 31
37 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
38 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
39 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
40 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
41 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
42 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
43 ?,2U(B ?,2!(B ?,2"(B ?,2#(B ?,2$(B ?,2%(B ?,2&(B ?,2'(B ?,2((B ?,2)(B ?,2*(B ?,2+(B ?,2,(B ?,2-(B ?,2.(B ?,2/(B
44 ?,20(B ?,21(B ?,22(B ?,25(B ?,2~(B ?,2>(B ?,26(B ?,27(B ?,28(B ?,2v(B ?,2w(B ?,2o(B ?,2|(B ?,2{(B ?,2x(B ?,2O(B
45 ?,2u(B ?,1!(B ?,1"(B ?,1#(B ?,1$(B ?,1%(B ?,1&(B ?,1'(B ?,1((B ?,1)(B ?,1*(B ?,1+(B ?,1,(B ?,1-(B ?,1.(B ?,1/(B
46 ?,10(B ?,11(B ?,12(B ?,2^(B ?,2=(B ?,15(B ?,16(B ?,17(B ?,18(B ?,2q(B ?,2Q(B ?,2W(B ?,2X(B ?,1=(B ?,1>(B ?,2_(B
47 ?,2`(B ?,2a(B ?,2b(B ?,2c(B ?,2d(B ?,2e(B ?,1F(B ?,1G(B ?,2h(B ?,2i(B ?,2j(B ?,2k(B ?,2l(B ?,2m(B ?,2n(B ?,1O(B
48 ?,2p(B ?,1Q(B ?,2r(B ?,2s(B ?,2t(B ?,1U(B ?,1V(B ?,1W(B ?,1X(B ?,2y(B ?,2z(B ?,1[(B ?,1\(B ?,2}(B ?,1^(B ?,1_(B
49 ?,1`(B ?,1a(B ?,1b(B ?,1c(B ?,1d(B ?,1e(B ?,1f(B ?,1g(B ?,1h(B ?,1i(B ?,1j(B ?,1k(B ?,1l(B ?,1m(B ?,1n(B ?,1o(B
50 ?,1p(B ?,1q(B ?,1r(B ?,1s(B ?,1t(B ?,1u(B ?,1v(B ?,1w(B ?,1x(B ?,1y(B ?,1z(B ?,1{(B ?,1|(B ?,1}(B ?,1~(B ?,2f(B ]
51 "Vietnamese VISCII encoding table.")
52
53 (defvar viet-viscii-encode-table
54 (let ((table-lower (make-vector 128 0))
55 (table-upper (make-vector 128 0))
56 (i 0)
57 char-component)
58 (while (< i 256)
59 (setq char-component (split-char (aref viet-viscii-decode-table i)))
60 (cond ((eq (car char-component) 'vietnamese-viscii-lower)
61 (aset table-lower (nth 1 char-component) i))
62 ((eq (car char-component) 'vietnamese-viscii-upper)
63 (aset table-upper (nth 1 char-component) i)))
64 (setq i (1+ i)))
65 (cons table-lower table-upper))
66 "Vietnamese VISCII decoding table.
67 Cons of tables for decoding lower-case chars and upper-case characterss.
68 Both tables are indexed by the position code of Vietnamese characters.")
69
70 (defvar viet-vscii-decode-table
71 [;; VSCII is a full 8-bit code.
72 0 ?,2z(B ?,2x(B 3 ?,2W(B ?,2X(B ?,2f(B 7 8 9 10 11 12 13 14 15
73 16 ?,2Q(B ?,2_(B ?,2O(B ?,2V(B ?,2[(B ?,2}(B ?,2\(B 24 25 26 27 28 29 30 31
74 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
75 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
76 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
77 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
78 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
79 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
80 ?,2`(B ?,2d(B ?,2c(B ?,2a(B ?,2U(B ?,2#(B ?,2'(B ?,2h(B ?,2k(B ?,2((B ?,2i(B ?,2)(B ?,2.(B ?,2l(B ?,2o(B ?,2n(B
81 ?,2m(B ?,28(B ?,2r(B ?,2v(B ?,2u(B ?,2s(B ?,2w(B ?,25(B ?,26(B ?,27(B ?,2^(B ?,2>(B ?,2~(B ?,2y(B ?,2|(B ?,2{(B
82 160 ?,2e(B ?,2b(B ?,2j(B ?,2t(B ?,2=(B ?,2_(B ?,2p(B ?,1e(B ?,1b(B ?,1j(B ?,1t(B ?,1>(B ?,1y(B ?,1p(B ?,2"(B
83 192 193 194 195 196 ?,1`(B ?,1d(B ?,1c(B ?,1a(B ?,1U(B ?,2F(B ?,1"(B ?,1F(B ?,1G(B ?,1!(B ?,2G(B
84 ?,2!(B ?,2%(B ?,2&(B ?,2g(B ?,2%(B ?,2+(B ?,1#(B ?,1%(B ?,1&(B ?,1g(B ?,1$(B ?,1'(B ?,1h(B ?,2,(B ?,1k(B ?,1((B
85 ?,1i(B ?,1)(B ?,1+(B ?,1,(B ?,1-(B ?,1*(B ?,1.(B ?,1l(B ?,1o(B ?,2-(B ?,2*(B ?,20(B ?,1n(B ?,1m(B ?,18(B ?,1r(B
86 ?,21(B ?,1v(B ?,1u(B ?,1s(B ?,1w(B ?,10(B ?,11(B ?,12(B ?,1/(B ?,15(B ?,16(B ?,17(B ?,1^(B ?,1>(B ?,1~(B ?,1y(B
87 ?,22(B ?,1|(B ?,1{(B ?,1z(B ?,1x(B ?,1W(B ?,1X(B ?,1f(B ?,1Q(B ?,1q(B ?,1O(B ?,1V(B ?,1[(B ?,1}(B ?,1\(B ?,2/(B]
88 "Vietnamese VSCII code table.")
89
90 (defvar viet-vscii-encode-table
91 (let ((table-lower (make-vector 128 0))
92 (table-upper (make-vector 128 0))
93 (i 0)
94 char-component)
95 (while (< i 256)
96 (setq char-component (split-char (aref viet-vscii-decode-table i)))
97 (cond ((eq (car char-component) 'vietnamese-viscii-lower)
98 (aset table-lower (nth 1 char-component) i))
99 ((eq (car char-component) 'vietnamese-viscii-upper)
100 (aset table-upper (nth 1 char-component) i)))
101 (setq i (1+ i)))
102 (cons table-lower table-upper))
103 "Vietnamese VSCII decoding table.
104 Cons of tables for decoding lower-case chars and upper-case characterss.
105 Both tables are indexed by the position code of Vietnamese characters.")
106
107 )
108
109 (define-ccl-program ccl-decode-viscii
110 `(3
111 ((read r0)
112 (loop
113 (write-read-repeat r0 ,viet-viscii-decode-table))
114 ))
115 "CCL program to decode VISCII 1.1")
116
117 ;; Multibyte form of a Vietnamese character is as follows (3-byte):
118 ;; LEADING-CODE-PRIVATE-11 LEADING-CODE-EXTENDED-11 POSITION-CODE
119 ;; where LEADING-CODE-EXTENDED-11 for Vietnamese is
120 ;; `vietnamese-viscii-lower' or `vietnamese-viscii-upper'.
121
122 (define-ccl-program ccl-encode-viscii
123 `(1
124 ((read r0)
125 (loop
126 (if (r0 < 128)
127 ;; ASCII
128 (write-read-repeat r0)
129 ;; not ASCII
130 (if (r0 != ,leading-code-private-11)
131 ;; not Vietnamese
132 (write-read-repeat r0)
133 ((read-if (r0 == ,(charset-id 'vietnamese-viscii-lower))
134 (;; Vietnamese lower
135 (read r0)
136 (r0 -= 128)
137 (write-read-repeat r0 ,(car viet-viscii-encode-table)))
138 (if (r0 == ,(charset-id 'vietnamese-viscii-upper))
139 (;; Vietnamese upper
140 (read r0)
141 (r0 -= 128)
142 (write-read-repeat r0 ,(cdr viet-viscii-encode-table)))
143 ;; not Vietnamese
144 (write-read-repeat r0)))))))))
145 "CCL program to encode VISCII 1.1")
146
147 (define-ccl-program ccl-encode-viscii-font
148 `(0
149 ;; In: R0:vietnamese-viscii-lower/vietnamese-viscii-upper
150 ;; R1:position code
151 ;; Out: R1:font code point
152 (if (r0 == ,(charset-id 'vietnamese-viscii-lower))
153 (r1 = r1 ,(car viet-viscii-encode-table))
154 (r1 = r1 ,(cdr viet-viscii-encode-table)))
155 )
156 "CCL program to encode Vietnamese chars to VISCII 1.1 font")
157
158 (define-ccl-program ccl-decode-vscii
159 `(3
160 ((read r0)
161 (loop
162 (write-read-repeat r0 ,viet-vscii-decode-table))
163 ))
164 "CCL program to decode VSCII-1.")
165
166 (define-ccl-program ccl-encode-vscii
167 `(1
168 ((read r0)
169 (loop
170 (if (r0 < 128)
171 ;; ASCII
172 (write-read-repeat r0)
173 ;; not ASCII
174 (if (r0 != ,leading-code-private-11)
175 ;; not Vietnamese
176 (write-read-repeat r0)
177 (read-if (r0 == ,(charset-id 'vietnamese-viscii-lower))
178 (;; Vietnamese lower
179 (read r0)
180 (r0 -= 128)
181 (write-read-repeat r0 ,(car viet-vscii-encode-table)))
182 (if (r0 == ,(charset-id 'vietnamese-viscii-upper))
183 (;; Vietnamese upper
184 (read r0)
185 (r0 -= 128)
186 (write-read-repeat r0 ,(cdr viet-viscii-encode-table)))
187 ;; not Vietnamese
188 (write-read-repeat r0))))))))
189 "CCL program to encode VSCII-1.")
190
191 (define-ccl-program ccl-encode-vscii-font
192 `(0
193 ;; In: R0:vietnamese-viscii-lower/vietnamese-viscii-upper
194 ;; R1:position code
195 ;; Out: R1:font code point
196 (if (r0 == ,(charset-id 'vietnamese-viscii-lower))
197 (r1 = r1 ,(car viet-vscii-encode-table))
198 (r1 = r1 ,(cdr viet-vscii-encode-table)))
199 )
200 "CCL program to encode Vietnamese chars to VSCII-1 font.")
201
202
203 (make-coding-system
204 'viscii 4 ?V
205 "Coding-system used for VISCII 1.1."
206 (cons ccl-decode-viscii ccl-encode-viscii))
207
208 (make-coding-system
209 'vscii 4 ?V
210 "Coding-system used for VSCII-1."
211 (cons ccl-decode-vscii ccl-encode-vscii))
212
213 (make-coding-system
214 'viqr 0 ?v
215 "Codins-system used for VIQR."
216 nil)
217 (put 'viqr 'post-read-conversion 'viqr-post-read-conversion)
218 (put 'viqr 'pre-write-conversion 'viqr-pre-write-conversion)
219
220 (setq font-ccl-encoder-alist
221 (cons (cons "viscii" ccl-encode-viscii-font) font-ccl-encoder-alist))
222
223 (setq font-ccl-encoder-alist
224 (cons (cons "vscii" ccl-encode-vscii-font) font-ccl-encoder-alist))
225
226 (register-input-method
227 "Vietnamese" '("quail-viqr" quail-use-package "quail/viqr"))
228
229 (defun setup-vietamese-environment ()
230 "Setup multilingual environment (MULE) for Vietnamese."
231 (interactive)
232 ;; for VISCII users
233 (setq coding-category-binary 'viscii)
234
235 ;; for VSCII users
236 ;; (setq coding-category-binary 'vscii)
237
238 (set-coding-priority
239 '(coding-category-iso-7
240 coding-category-binary))
241
242 (setq-default buffer-file-coding-system 'viscii)
243
244 (setq default-input-method '("Vietnamese" . "quail-viqr"))
245 )
246
247 (defun describe-vietnamese-support ()
248 "Describe how Emacs supports Vietnamese."
249 (interactive)
250 (describe-langauge-support-internal "Vietnamese"))
251
252 (set-language-info-alist
253 "Vietnamese" '((setup-function . setup-vietnamese-environment)
254 (describe-function . describe-vietnamese-support)
255 (charset . (vietnamese-viscii-lower
256 vietnamese-viscii-upper))
257 (coding-system . (viscii vscii viqr))
258 (sample-text . "Vietnamese (Ti,1*(Bng Vi,1.(Bt) Ch,1`(Bo b,1U(Bn")
259 (documentation . nil)))
260
261 ;;; vietnamese.el ends here