1 ;;; viet-ccl.el --- CCL codes for Vietnamese -*- coding: iso-2022-7bit; -*-
3 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
4 ;; Licensed to the Free Software Foundation.
5 ;; Copyright (C) 1997,2000 MORIOKA Tomohiko
7 ;; Keywords: CCL, MULE, multilingual, Vietnamese
9 ;; This file is part of XEmacs.
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)
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.
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
28 ;; For Vietnames, the character sets VISCII and VSCII are supported.
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.")
54 (defvar viet-viscii-encode-table
55 (let ((table-lower (make-vector 128 0))
56 (table-upper (make-vector 128 0))
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)))
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.")
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.")
92 (defvar viet-vscii-encode-table
93 (let ((table-lower (make-vector 128 0))
94 (table-upper (make-vector 128 0))
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)))
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.")
112 (define-ccl-program ccl-decode-viscii
116 (write-read-repeat r0 ,viet-viscii-decode-table))
118 "CCL program to decode VISCII 1.1")
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'.
125 (define-ccl-program ccl-encode-viscii
131 (write-read-repeat r0)
133 (if (r0 != ,leading-code-private-11)
135 (write-read-repeat r0)
136 ((read-if (r0 == ,(charset-id 'vietnamese-viscii-lower))
140 (write-read-repeat r0 ,(car viet-viscii-encode-table)))
141 (if (r0 == ,(charset-id 'vietnamese-viscii-upper))
145 (write-read-repeat r0 ,(cdr viet-viscii-encode-table)))
147 (write-read-repeat r0)))))))))
148 "CCL program to encode VISCII 1.1")
150 (define-ccl-program ccl-encode-viscii-font
152 ;; In: R0:vietnamese-viscii-lower/vietnamese-viscii-upper
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)))
159 "CCL program to encode Vietnamese chars to VISCII 1.1 font")
161 (define-ccl-program ccl-decode-vscii
165 (write-read-repeat r0 ,viet-vscii-decode-table))
167 "CCL program to decode VSCII-1.")
169 (define-ccl-program ccl-encode-vscii
175 (write-read-repeat r0)
177 (if (r0 != ,leading-code-private-11)
179 (write-read-repeat r0)
180 (read-if (r0 == ,(charset-id 'vietnamese-viscii-lower))
184 (write-read-repeat r0 ,(car viet-vscii-encode-table)))
185 (if (r0 == ,(charset-id 'vietnamese-viscii-upper))
189 (write-read-repeat r0 ,(cdr viet-vscii-encode-table)))
191 (write-read-repeat r0))))))))
192 "CCL program to encode VSCII-1.")
194 (define-ccl-program ccl-encode-vscii-font
196 ;; In: R0:vietnamese-viscii-lower/vietnamese-viscii-upper
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)))
203 "CCL program to encode Vietnamese chars to VSCII-1 font.")
208 "Coding-system used for VISCII 1.1."
210 decode ccl-decode-viscii
211 encode ccl-encode-viscii))
213 ;; it is not correct, but XEmacs doesn't have `ccl' category...
214 (coding-system-put 'viscii 'category 'iso-8-1)
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))))
224 ;; (define-coding-system-alias 'viscii 'vietnamese-viscii)
228 "Coding-system used for VSCII 1.1."
230 decode ccl-decode-vscii
231 encode ccl-encode-vscii))
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))))
240 ;; (define-coding-system-alias 'vscii 'vietnamese-vscii)
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)
248 (set-charset-ccl-program 'vietnamese-viscii-lower 'ccl-encode-vscii-font)
249 (set-charset-ccl-program 'vietnamese-viscii-upper 'ccl-encode-vscii-font)
251 ;; (setq font-ccl-encoder-alist
252 ;; (cons (cons "viscii" ccl-encode-viscii-font) font-ccl-encoder-alist))
254 ;; (setq font-ccl-encoder-alist
255 ;; (cons (cons "vscii" ccl-encode-vscii-font) font-ccl-encoder-alist))
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.")
261 ;;; viet-ccl.el ends here