-;;; vietnamese.el --- Support for Vietnamese
+;;; vietnamese.el --- support for Vietnamese -*- coding: iso-2022-7bit; -*-
-;; Copyright (C) 1995 Free Software Foundation, Inc.
-;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
+;; Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1997, 1998, 2000
+;; National Institute of Advanced Industrial Science and Technology (AIST)
+;; Registration Number H14PRO021
;; Keywords: multilingual, Vietnamese
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
-;; For Vietnames, the character sets VISCII and VSCII are supported.
+;; For Vietnames, the character sets VISCII, VSCII and TCVN-5712 are
+;; supported.
;;; Code:
-(eval-when-compile
-
(defvar viet-viscii-decode-table
[;; VISCII is a full 8-bit code.
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
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
+ 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
?\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
?\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
?\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
?\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
?\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
?\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 ]
- "Vietnamese VISCII encoding table.")
-
-(defvar viet-viscii-encode-table
- (let ((table-lower (make-vector 128 0))
- (table-upper (make-vector 128 0))
- (i 0)
- char-component)
- (while (< i 256)
- (setq char-component (split-char (aref viet-viscii-decode-table i)))
- (cond ((eq (car char-component) 'vietnamese-viscii-lower)
- (aset table-lower (nth 1 char-component) i))
- ((eq (car char-component) 'vietnamese-viscii-upper)
- (aset table-upper (nth 1 char-component) i)))
- (setq i (1+ i)))
- (cons table-lower table-upper))
- "Vietnamese VISCII decoding table.
-Cons of tables for decoding lower-case chars and upper-case characterss.
-Both tables are indexed by the position code of Vietnamese characters.")
+ "Vietnamese VISCII decoding table.")
+
+(let ((table (make-translation-table-from-vector viet-viscii-decode-table)))
+ (define-translation-table 'viet-viscii-nonascii-translation-table table)
+ (define-translation-table 'viet-viscii-encode-table
+ (char-table-extra-slot table 0)))
+;;;
+;;; VSCII is a pre-version of TCVN-5712 and deprecated
+;;;
(defvar viet-vscii-decode-table
[;; VSCII is a full 8-bit code.
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
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
+ 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
?\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
?\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
- 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
+ 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
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
?\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
?\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
?\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
?\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]
- "Vietnamese VSCII code table.")
-
-(defvar viet-vscii-encode-table
- (let ((table-lower (make-vector 128 0))
- (table-upper (make-vector 128 0))
- (i 0)
- char-component)
- (while (< i 256)
- (setq char-component (split-char (aref viet-vscii-decode-table i)))
- (cond ((eq (car char-component) 'vietnamese-viscii-lower)
- (aset table-lower (nth 1 char-component) i))
- ((eq (car char-component) 'vietnamese-viscii-upper)
- (aset table-upper (nth 1 char-component) i)))
- (setq i (1+ i)))
- (cons table-lower table-upper))
- "Vietnamese VSCII decoding table.
-Cons of tables for decoding lower-case chars and upper-case characterss.
-Both tables are indexed by the position code of Vietnamese characters.")
-
-)
+ "Vietnamese VSCII decoding table.")
+
+(let ((table (make-translation-table-from-vector viet-vscii-decode-table)))
+ (define-translation-table 'viet-vscii-nonascii-translation-table table)
+ (define-translation-table 'viet-vscii-encode-table
+ (char-table-extra-slot table 0)))
+
+;; Does not support combining characters in the range [176, 180]
+(defvar viet-tcvn-decode-table
+ [;; TCVN is a full 8-bit code.
+ 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
+ 16 ?\e,2Q\e(B ?\e,2q\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
+ 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,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
+ ?\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
+ 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,1_\e(B ?\e,1p\e(B ?\e,2"\e(B
+ 176 177 178 179 180 ?\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
+ ?\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
+ ?\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
+ ?\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
+ ?\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]
+ "Vietnamese TCVN-5712 decoding table.")
+
+(let ((table (make-translation-table-from-vector viet-tcvn-decode-table)))
+ (define-translation-table 'viet-tcvn-nonascii-translation-table table)
+ (define-translation-table 'viet-tcvn-encode-table
+ (char-table-extra-slot table 0)))
+
+;; (defvar viet-vps-decode-table
+;; [;; VPS is a full 8-bit code.
+;; 0 1 ?\e,2U\e(B ?\e,2'\e(B ?\e,2#\e(B ?\e,2)\e(B ?\e,2.\e(B 7 8 9 10 11 12 13 14 15
+;; ?\e,28\e(B ?\e,2w\e(B ?\e,25\e(B ?\e,2~\e(B ?\e,2x\e(B ?\e,2q\e(B 22 23 24 ?\e,2\\e(B 26 27 ?\e,2g\e(B ?\e,2f\e(B 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,2`\e(B ?\e,2d\e(B ?\e,2c\e(B ?\e,2$\e(B ?\e,2%\e(B ?\e,2&\e(B ?\e,1w\e(B ?\e,12\e(B ?\e,2e\e(B ?\e,1*\e(B ?\e,1+\e(B ?\e,1,\e(B ?\e,1.\e(B ?\e,2!\e(B ?\e,2"\e(B ?\e,2F\e(B
+;; ?\e,2*\e(B 145 146 ?\e,2+\e(B ?\e,2,\e(B ?\e,2-\e(B ?\e,2/\e(B ?\e,20\e(B ?\e,21\e(B ?\e,22\e(B ?\e,1}\e(B ?\e,1V\e(B ?\e,1\\e(B ?\e,2>\e(B ?\e,26\e(B ?\e,27\e(B
+;; 160 ?\e,1!\e(B ?\e,1"\e(B ?\e,1F\e(B ?\e,1G\e(B ?\e,1#\e(B ?\e,2^\e(B ?\e,1>\e(B ?\e,2y\e(B ?\e,16\e(B ?\e,17\e(B ?\e,1^\e(B ?\e,2{\e(B ?\e,2Q\e(B ?\e,1~\e(B ?\e,2W\e(B
+;; ?\e,11\e(B ?\e,2X\e(B ?\e,2O\e(B ?\e,2[\e(B ?\e,2m\e(B ?\e,2l\e(B ?\e,15\e(B ?\e,2o\e(B ?\e,2n\e(B ?\e,2s\e(B ?\e,1X\e(B ?\e,1f\e(B ?\e,2r\e(B ?\e,2v\e(B ?\e,2u\e(B ?\e,1q\e(B
+;; ?\e,1%\e(B ?\e,2a\e(B ?\e,2b\e(B ?\e,1$\e(B ?\e,1&\e(B ?\e,1g\e(B ?\e,1'\e(B ?\e,1p\e(B ?\e,1k\e(B ?\e,2i\e(B ?\e,2j\e(B ?\e,1)\e(B ?\e,1o\e(B ?\e,1-\e(B ?\e,18\e(B ?\e,1[\e(B
+;; ?\e,2_\e(B ?\e,2|\e(B ?\e,10\e(B ?\e,1/\e(B ?\e,2t\e(B ?\e,1v\e(B ?\e,1=\e(B ?\e,2h\e(B ?\e,1W\e(B ?\e,1Q\e(B ?\e,2z\e(B ?\e,1{\e(B ?\e,1_\e(B ?\e,2}\e(B ?\e,2k\e(B 223
+;; ?\e,1`\e(B ?\e,1a\e(B ?\e,1b\e(B ?\e,1c\e(B ?\e,1d\e(B ?\e,1U\e(B ?\e,1e\e(B 231 ?\e,1h\e(B ?\e,1i\e(B ?\e,1j\e(B ?\e,1(\e(B ?\e,1l\e(B ?\e,1m\e(B 238 ?\e,1n\e(B
+;; ?\e,2G\e(B ?\e,2p\e(B ?\e,1r\e(B ?\e,1s\e(B ?\e,1t\e(B ?\e,1u\e(B 246 ?\e,2=\e(B ?\e,1x\e(B ?\e,1y\e(B ?\e,1z\e(B ?\e,1|\e(B 252 ?\e,2V\e(B ?\e,2(\e(B ?\e,1O\e(B]
+;; "Vietnamese VPS decoding table.")
+;;
+;; (let ((table (make-translation-table-from-vector viet-vps-decode-table)))
+;; (define-translation-table 'viet-vps-nonascii-translation-table table)
+;; (define-translation-table 'viet-vps-encode-table
+;; (char-table-extra-slot table 0)))
(define-ccl-program ccl-decode-viscii
`(3
- ((read r0)
- (loop
- (write-read-repeat r0 ,viet-viscii-decode-table))
- ))
+ ((loop
+ (r0 = 0)
+ (read r1)
+ (translate-character viet-viscii-nonascii-translation-table r0 r1)
+ (write-multibyte-character r0 r1)
+ (repeat))))
"CCL program to decode VISCII 1.1")
-;; Multibyte form of a Vietnamese character is as follows (3-byte):
-;; LEADING-CODE-PRIVATE-11 LEADING-CODE-EXTENDED-11 POSITION-CODE
-;; where LEADING-CODE-EXTENDED-11 for Vietnamese is
-;; `vietnamese-viscii-lower' or `vietnamese-viscii-upper'.
-
(define-ccl-program ccl-encode-viscii
`(1
- ((read r0)
- (loop
- (if (r0 < 128)
- ;; ASCII
- (write-read-repeat r0)
- ;; not ASCII
- (if (r0 != ,leading-code-private-11)
- ;; not Vietnamese
- (write-read-repeat r0)
- ((read-if (r0 == ,(charset-id 'vietnamese-viscii-lower))
- (;; Vietnamese lower
- (read r0)
- (r0 -= 128)
- (write-read-repeat r0 ,(car viet-viscii-encode-table)))
- (if (r0 == ,(charset-id 'vietnamese-viscii-upper))
- (;; Vietnamese upper
- (read r0)
- (r0 -= 128)
- (write-read-repeat r0 ,(cdr viet-viscii-encode-table)))
- ;; not Vietnamese
- (write-read-repeat r0)))))))))
+ ((loop
+ (read-multibyte-character r0 r1)
+ (translate-character viet-viscii-encode-table r0 r1)
+ (write-repeat r1))))
"CCL program to encode VISCII 1.1")
(define-ccl-program ccl-encode-viscii-font
;; In: R0:vietnamese-viscii-lower/vietnamese-viscii-upper
;; R1:position code
;; Out: R1:font code point
- (if (r0 == ,(charset-id 'vietnamese-viscii-lower))
- (r1 = r1 ,(car viet-viscii-encode-table))
- (r1 = r1 ,(cdr viet-viscii-encode-table)))
- )
+ (translate-character viet-viscii-encode-table r0 r1))
"CCL program to encode Vietnamese chars to VISCII 1.1 font")
(define-ccl-program ccl-decode-vscii
`(3
- ((read r0)
- (loop
- (write-read-repeat r0 ,viet-vscii-decode-table))
- ))
+ ((loop
+ (r0 = 0)
+ (read r1)
+ (translate-character viet-vscii-nonascii-translation-table r0 r1)
+ (write-multibyte-character r0 r1)
+ (repeat))))
"CCL program to decode VSCII-1.")
(define-ccl-program ccl-encode-vscii
`(1
- ((read r0)
- (loop
- (if (r0 < 128)
- ;; ASCII
- (write-read-repeat r0)
- ;; not ASCII
- (if (r0 != ,leading-code-private-11)
- ;; not Vietnamese
- (write-read-repeat r0)
- (read-if (r0 == ,(charset-id 'vietnamese-viscii-lower))
- (;; Vietnamese lower
- (read r0)
- (r0 -= 128)
- (write-read-repeat r0 ,(car viet-vscii-encode-table)))
- (if (r0 == ,(charset-id 'vietnamese-viscii-upper))
- (;; Vietnamese upper
- (read r0)
- (r0 -= 128)
- (write-read-repeat r0 ,(cdr viet-viscii-encode-table)))
- ;; not Vietnamese
- (write-read-repeat r0))))))))
+ ((loop
+ (read-multibyte-character r0 r1)
+ (translate-character viet-vscii-encode-table r0 r1)
+ (write-repeat r1))))
"CCL program to encode VSCII-1.")
(define-ccl-program ccl-encode-vscii-font
;; In: R0:vietnamese-viscii-lower/vietnamese-viscii-upper
;; R1:position code
;; Out: R1:font code point
- (if (r0 == ,(charset-id 'vietnamese-viscii-lower))
- (r1 = r1 ,(car viet-vscii-encode-table))
- (r1 = r1 ,(cdr viet-vscii-encode-table)))
- )
+ (translate-character viet-vscii-encode-table r0 r1))
"CCL program to encode Vietnamese chars to VSCII-1 font.")
+(define-ccl-program ccl-decode-tcvn
+ `(3
+ ((loop
+ (r0 = 0)
+ (read r1)
+ (translate-character viet-tcvn-nonascii-translation-table r0 r1)
+ (write-multibyte-character r0 r1)
+ (repeat))))
+ "CCL program to decode TCVN-5712.")
+
+(define-ccl-program ccl-encode-tcvn
+ `(1
+ ((loop
+ (read-multibyte-character r0 r1)
+ (translate-character viet-tcvn-encode-table r0 r1)
+ (write-repeat r1))))
+ "CCL program to encode TCVN-5712.")
-(make-coding-system
- 'coding-system-viscii 4 ?V
- "Coding-system used for VISCII 1.1."
- (cons ccl-decode-viscii ccl-encode-viscii))
+(define-ccl-program ccl-encode-tcvn-font
+ `(0
+ ;; In: R0:vietnamese-viscii-lower/vietnamese-viscii-upper
+ ;; R1:position code
+ ;; Out: R1:font code point
+ (translate-character viet-tcvn-encode-table r0 r1))
+ "CCL program to encode Vietnamese chars to TCVN-5712 font.")
+
+;; (define-ccl-program ccl-decode-vps
+;; `(3
+;; ((loop
+;; (r0 = 0)
+;; (read r1)
+;; (translate-character viet-vps-nonascii-translation-table r0 r1)
+;; (write-multibyte-character r0 r1)
+;; (repeat))))
+;; "CCL program to decode VPS.")
+;;
+;; (define-ccl-program ccl-encode-vps
+;; `(1
+;; ((loop
+;; (read-multibyte-character r0 r1)
+;; (translate-character viet-vps-encode-table r0 r1)
+;; (write-repeat r1))))
+;; "CCL program to encode VPS.")
+;;
+;; (define-ccl-program ccl-encode-vps-font
+;; `(0
+;; ;; In: R0:vietnamese-viscii-lower/vietnamese-viscii-upper
+;; ;; R1:position code
+;; ;; Out: R1:font code point
+;; (translate-character viet-vps-encode-table r0 r1))
+;; "CCL program to encode Vietnamese chars to VPS font.")
(make-coding-system
- 'coding-system-vscii 4 ?V
- "Coding-system used for VSCII-1."
- (cons ccl-decode-vscii ccl-encode-vscii))
+ 'vietnamese-viscii 4 ?V
+ "8-bit encoding for Vietnamese VISCII 1.1 (MIME:VISCII)"
+ '(ccl-decode-viscii . ccl-encode-viscii)
+ '((safe-charsets ascii vietnamese-viscii-lower vietnamese-viscii-upper)
+ (mime-charset . viscii)
+ (valid-codes (0 . 255))))
+
+(define-coding-system-alias 'viscii 'vietnamese-viscii)
(make-coding-system
- 'coding-system-viqr 0 ?v
- "Codins-system used for VIQR."
- nil)
-(put 'coding-system-viqr 'post-read-conversion 'viet-decode-viqr-region)
-(put 'coding-system-viqr 'pre-write-conversion 'viet-encode-viqr-region)
+ 'vietnamese-vscii 4 ?v
+ "8-bit encoding for Vietnamese VSCII-1"
+ '(ccl-decode-vscii . ccl-encode-vscii)
+ '((safe-charsets ascii vietnamese-viscii-lower vietnamese-viscii-upper)
+ (valid-codes (0 . 255))))
-(setq font-ccl-encoder-alist
- (cons (cons "viscii" ccl-encode-viscii-font) font-ccl-encoder-alist))
+(define-coding-system-alias 'vscii 'vietnamese-vscii)
-(setq font-ccl-encoder-alist
- (cons (cons "vscii" ccl-encode-vscii-font) font-ccl-encoder-alist))
+(make-coding-system
+ 'vietnamese-tcvn 4 ?t
+ "8-bit encoding for Vietnamese TCVN-5712"
+ '(ccl-decode-tcvn . ccl-encode-tcvn)
+ '((safe-charsets ascii vietnamese-viscii-lower vietnamese-viscii-upper)
+ (valid-codes (0 . 255))))
+
+(define-coding-system-alias 'tcvn 'vietnamese-tcvn)
+
+;; (make-coding-system
+;; 'vietnamese-vps 4 ?p
+;; "8-bit encoding for Vietnamese VPS"
+;; '(ccl-decode-vps . ccl-encode-vps)
+;; '((safe-charsets ascii vietnamese-viscii-lower vietnamese-viscii-upper)
+;; (valid-codes (0 . 255))))
+;;
+;; (define-coding-system-alias 'vps 'vietnamese-vps)
-(register-input-method
- "Vietnamese" '("quail-viqr" quail-use-package "quail/viqr"))
+(make-coding-system
+ 'vietnamese-viqr 0 ?q
+ "Vietnamese latin transcription (VIQR)"
+ nil
+ '((safe-charsets ascii vietnamese-viscii-lower vietnamese-viscii-upper)
+ (post-read-conversion . viqr-post-read-conversion)
+ (pre-write-conversion . viqr-pre-write-conversion)
+ (charset-origin-alist
+ (vietnamese-viscii-lower "VISCII" viet-encode-viscii-char)
+ (vietnamese-viscii-upper "VISCII" viet-encode-viscii-char))))
-(defun setup-viet-environment ()
- ;; for VISCII users
- (setq coding-category-binary 'coding-system-viscii)
- ;; for VSCII users
- ;; (setq coding-category-binary 'coding-system-vscii)
+(define-coding-system-alias 'viqr 'vietnamese-viqr)
- (set-coding-priority
- '(coding-category-iso-7
- coding-category-binary))
+(setq font-ccl-encoder-alist
+ (cons '("viscii" . ccl-encode-viscii-font) font-ccl-encoder-alist))
- (setq-default buffer-file-coding-system 'coding-system-viscii)
+(setq font-ccl-encoder-alist
+ (cons '("vscii" . ccl-encode-vscii-font) font-ccl-encoder-alist))
- (setq default-input-method '("Vietnamese" . "quail-viqr"))
- )
+(setq font-ccl-encoder-alist
+ (cons '("tcvn" . ccl-encode-tcvn-font) font-ccl-encoder-alist))
(set-language-info-alist
- "Vietnamese" '((setup-function . setup-viet-environment)
- (charset . (vietnamese-viscii-lower
- vietnamese-viscii-upper))
- (coding-system . (coding-system-viscii
- coding-system-vscii
- coding-system-viqr))
- (documentation . t)
- (sample-text . "Vietnamese (Ti\e,1*\e(Bng Vi\e,1.\e(Bt) Ch\e,1`\e(Bo b\e,1U\e(Bn")))
-
+ "Vietnamese" `((charset vietnamese-viscii-lower vietnamese-viscii-upper)
+ (nonascii-translation
+ . ,(get 'viet-viscii-nonascii-translation-table
+ 'translation-table))
+ (coding-system vietnamese-viscii vietnamese-vscii vietnamese-tcvn
+ vietnamese-viqr)
+ (coding-priority vietnamese-viscii)
+ (input-method . "vietnamese-viqr")
+ (unibyte-display . vietnamese-viscii)
+ (features viet-util)
+ (sample-text . "Vietnamese (Ti\e,1*\e(Bng Vi\e,1.\e(Bt) Ch\e,1`\e(Bo b\e,1U\e(Bn")
+ (documentation . "\
+For Vietnamese, Emacs uses special charsets internally.
+They can be decoded from and encoded to VISCII, VSCII, TCVN-5712, and
+VIQR. VSCII is deprecated in favour of TCVN-5712. Current setting
+puts higher priority to the coding system VISCII than TCVN-5712. If
+you prefer TCVN-5712, please do: (prefer-coding-system 'vietnamese-tcvn).
+There are two Vietnamese input methods: VIQR and Telex, VIQR is the
+default setting.")
+ ))
+
+(provide 'vietnamese)
+
+;;; arch-tag: 5bd4f1aa-2d4e-4f33-b7d8-0679c6a19ee6
;;; vietnamese.el ends here