Mercurial > hg > xemacs-beta
comparison lisp/leim/quail/thai.el @ 197:acd284d43ca1 r20-3b25
Import from CVS: tag r20-3b25
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:00:02 +0200 |
parents | 43dd3413c7c7 |
children |
comparison
equal
deleted
inserted
replaced
196:58e0786448ca | 197:acd284d43ca1 |
---|---|
1 ;;; quail/thai.el --- Quail package for inputting Thai characters | 1 ;;; quail/thai.el --- Quail package for inputting Thai characters |
2 | 2 |
3 ;; Copyright (C) 1995 Free Software Foundation, Inc. | |
4 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. | 3 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. |
4 ;; Licensed to the Free Software Foundation. | |
5 | 5 |
6 ;; Keywords: multilingual, input method, Thai | 6 ;; Keywords: multilingual, input method, Thai |
7 | 7 |
8 ;; This file is part of GNU Emacs. | 8 ;; This file is part of GNU Emacs. |
9 | 9 |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | 16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
18 ;; GNU General Public License for more details. | 18 ;; GNU General Public License for more details. |
19 | 19 |
20 ;; You should have received a copy of the GNU General Public License | 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 | 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
22 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | 22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
23 ;; Boston, MA 02111-1307, USA. | |
23 | 24 |
24 ;;; Code: | 25 ;;; Code: |
25 | 26 |
26 (require 'quail) | 27 (require 'quail) |
27 (require 'language/thai-util) | 28 (require 'thai-util) |
28 | 29 |
29 (eval-and-compile | 30 (eval-and-compile |
30 | 31 |
31 (defvar thai-keyboard-mapping | 32 (defvar thai-keyboard-mapping-alist |
32 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes | 33 '((kesmanee |
33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes | 34 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes |
34 0 "#" ",TF(B" ",Tr(B" ",Ts(B" ",Tt(B" "0,TQi1(B" ",T'(B" ; SPC .. ' | 35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes |
35 ",Tv(B" ",Tw(B" ",Tu(B" ",Ty(B" ",TA(B" ",T"(B" ",Tc(B" ",T=(B" ; ( .. / | 36 0 "#" ",TF(B" ",Tr(B" ",Ts(B" ",Tt(B" "0,TQi1(B" ",T'(B" ; SPC .. ' |
36 ",T((B" ",TE(B" "/" "_" ",T@(B" ",T6(B" ",TX(B" ",TV(B" ; 0 .. 7 | 37 ",Tv(B" ",Tw(B" ",Tu(B" ",Ty(B" ",TA(B" ",T"(B" ",Tc(B" ",T=(B" ; ( .. / |
37 ",T$(B" ",T5(B" ",T+(B" ",TG(B" ",T2(B" ",T*(B" ",TL(B" 0 ; 8 .. ? | 38 ",T((B" ",TE(B" "/" "_" ",T@(B" ",T6(B" ",TX(B" ",TV(B" ; 0 .. 7 |
38 ",Tq(B" ",TD(B" ",TZ(B" ",T)(B" ",T/(B" ",T.(B" ",Tb(B" ",T,(B" ; @ .. G | 39 ",T$(B" ",T5(B" ",T+(B" ",TG(B" ",T2(B" ",T*(B" ",TL(B" ",TF(B" ; 8 .. ? |
39 ",Tg(B" ",T3(B" ",Tk(B" ",TI(B" ",TH(B" ",Tn(B" ",Tl(B" ",TO(B" ; H .. O | 40 ",Tq(B" ",TD(B" ",TZ(B" ",T)(B" ",T/(B" ",T.(B" ",Tb(B" ",T,(B" ; @ .. G |
40 ",T-(B" ",Tp(B" ",T1(B" ",T&(B" ",T8(B" ",Tj(B" ",TN(B" "\"" ; P .. W | 41 ",Tg(B" ",T3(B" ",Tk(B" ",TI(B" ",TH(B" ",Tn(B" ",Tl(B" ",TO(B" ; H .. O |
41 ")" ",Tm(B" "(" ",T:(B" ",T_(B" ",TE(B" ",TY(B" ",Tx(B" ; X .. _ | 42 ",T-(B" ",Tp(B" ",T1(B" ",T&(B" ",T8(B" ",Tj(B" ",TN(B" "\"" ; P .. W |
42 ",T#(B" ",T?(B" ",TT(B" ",Ta(B" ",T!(B" ",TS(B" ",T4(B" ",T`(B" ; ` .. g | 43 ")" ",Tm(B" "(" ",T:(B" ",T_(B" ",TE(B" ",TY(B" ",Tx(B" ; X .. _ |
43 ",Ti(B" ",TC(B" ",Th(B" ",TR(B" ",TJ(B" ",T7(B" ",TW(B" ",T9(B" ; h .. o | 44 ",T#(B" ",T?(B" ",TT(B" ",Ta(B" ",T!(B" ",TS(B" ",T4(B" ",T`(B" ; ` .. g |
44 ",TB(B" ",Tf(B" ",T>(B" ",TK(B" ",TP(B" ",TU(B" ",TM(B" ",Td(B" ; p .. w | 45 ",Ti(B" ",TC(B" ",Th(B" ",TR(B" ",TJ(B" ",T7(B" ",TW(B" ",T9(B" ; h .. o |
45 ",T;(B" ",TQ(B" ",T<(B" ",T0(B" ",To(B" "," ",T%(B" 0] ; x .. DEL | 46 ",TB(B" ",Tf(B" ",T>(B" ",TK(B" ",TP(B" ",TU(B" ",TM(B" ",Td(B" ; p .. w |
46 "A table which maps ASCII key codes to corresponding Thai characters." | 47 ",T;(B" ",TQ(B" ",T<(B" ",T0(B" ",To(B" "." ",T%(B" 0] ; x .. DEL |
47 ) | 48 nil nil) |
49 | |
50 (pattachote | |
51 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes | |
52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes | |
53 0 "+" ",T1(B" "/" "," "?" "_" ",T"(B" ; SPC .. ' | |
54 "(" ")" "." "%" ",TP(B" ",Tq(B" ",T((B" ",T>(B" ; ( .. / | |
55 ",Tp(B" "=" ",Tr(B" ",Ts(B" ",Tt(B" ",Tu(B" ",TY(B" ",Tw(B" ; 0 .. 7 | |
56 ",Tx(B" ",Ty(B" ",T&(B" ",Td(B" ",T?(B" ",Tv(B" ",T2(B" ",TL(B" ; 8 .. ? | |
57 "\"" ",Tk(B" ",TQ(B" ",T0(B" ",TS(B" ",Tf(B" ",T3(B" ",Tl(B" ; @ .. G | |
58 ",TW(B" ",T+(B" ",T<(B" ",T*(B" ",Tb(B" ",TN(B" ",TH(B" ",T6(B" ; H .. O | |
59 ",T2(B" ",Tj(B" ",T-(B" ",T8(B" ",TI(B" ",T=(B" ",T@(B" ",TD(B" ; P .. W | |
60 ",T.(B" ",TV(B" ",T.(B" ",Tc(B" ",TZ(B" ",T2(B" ",TX(B" "-" ; X .. _ | |
61 ",T#(B" ",Ti(B" ",TT(B" ",TE(B" ",T'(B" ",TB(B" ",T!(B" ",TQ(B" ; ` .. g | |
62 ",TU(B" ",TA(B" ",TR(B" ",T9(B" ",T`(B" ",TJ(B" ",T$(B" ",TG(B" ; h .. o | |
63 ",Ta(B" ",Tg(B" ",TM(B" ",T7(B" ",TC(B" ",T4(B" ",TK(B" ",T5(B" ; p .. w | |
64 ",T;(B" ",Th(B" ",T:(B" ",TO(B" ",Tm(B" ",TF(B" ",T%(B" 0] ; x .. DEL | |
65 nil nil) | |
66 ) | |
67 "Alist of Thai keyboard types vs. corresponding mapping tables. | |
68 Each element is a list of: | |
69 KEYBOARD-TYPE, ASCII-THAI-TABLE, CONSONANT-MAP-TEMPLATE, | |
70 and VOWEL-UPPER-LOWER-TEMPLATE. | |
71 | |
72 KEYBOARD-TYPE is a symbol, one of kesmanee or pattachote. | |
73 | |
74 ASCII-THAI-TABLE is a vector indexed by an ASCII key code | |
75 and the value is the one-char string of Thai character | |
76 assigned at the location of ASCII key on the specific Thai keyboard. | |
77 The value is 0 if no Thai character is assigned at the location. | |
78 | |
79 CONSONANT-MAP-TEMPLATE is a template of a cdr part of a Quail map when | |
80 a consonant is entered. | |
81 | |
82 VOWEL-UPPER-LOWER-TEMPLATE is a template of a cdr part of a Quail map | |
83 when a vowel upper or a vowel lower is entered.") | |
84 | |
85 (defmacro thai-keyboard-info (keyboard-type) | |
86 `(assq ,keyboard-type thai-keyboard-mapping-alist)) | |
48 | 87 |
49 ) | 88 ) |
89 | |
90 (defvar thai-current-keyboard-type nil | |
91 "Thai Keyboard type which Quail is assuming currently. | |
92 This variable is used in Quail internally only.") | |
50 | 93 |
51 ;; Template of a cdr part of a Quail map when a consonant is entered. | 94 ;; Template of a cdr part of a Quail map when a consonant is entered. |
52 (defvar thai-consonant-alist nil) | 95 (defvar thai-consonant-alist nil) |
53 ;; Template of a cdr part of a Quail map when a vowel upper or a vowel | 96 ;; Template of a cdr part of a Quail map when a vowel upper or a vowel |
54 ;; lower is entered. | 97 ;; lower is entered. |
59 ;; The cdr part of the map is a copy of ALIST. | 102 ;; The cdr part of the map is a copy of ALIST. |
60 (defun thai-generate-quail-map (key len alist) | 103 (defun thai-generate-quail-map (key len alist) |
61 (let ((str "") | 104 (let ((str "") |
62 (idx 0)) | 105 (idx 0)) |
63 (while (< idx len) | 106 (while (< idx len) |
64 (setq str (concat str (aref thai-keyboard-mapping (aref key idx))) | 107 (setq str (concat str (aref (nth 1 (thai-keyboard-info |
108 thai-current-keyboard-type)) | |
109 (aref key idx))) | |
65 idx (1+ idx))) | 110 idx (1+ idx))) |
66 (cons (string-to-char (compose-string str)) (copy-alist alist)))) | 111 (cons (string-to-char (compose-string str)) (copy-alist alist)))) |
67 | 112 |
68 ;; Return a Quail map corresponding to KEY of length LEN when Thai | 113 ;; Return a Quail map corresponding to KEY of length LEN when Thai |
69 ;; tone mark is entered. | 114 ;; tone mark is entered. |
71 (thai-generate-quail-map key len nil)) | 116 (thai-generate-quail-map key len nil)) |
72 | 117 |
73 ;; Return a Quail map corresponding to KEY of length LEN when Thai | 118 ;; Return a Quail map corresponding to KEY of length LEN when Thai |
74 ;; vowel upper or vowel lower is entered. | 119 ;; vowel upper or vowel lower is entered. |
75 (defun thai-vowel-upper-lower-input (key len) | 120 (defun thai-vowel-upper-lower-input (key len) |
76 (thai-generate-quail-map key len thai-vowel-upper-lower-alist)) | 121 (thai-generate-quail-map |
77 | 122 key len |
78 ;; Return an alist which can be a cdr part of a Quail map | 123 (nth 3 (thai-keyboard-info thai-current-keyboard-type)))) |
79 ;; corresponding to the current key when Thai consonant is entered. | |
80 (defun thai-consonant-input (key len) | |
81 (copy-alist thai-consonant-alist)) | |
82 | |
83 (quail-define-package "quail-thai" "Thai" "Thai" t | |
84 "Thai input method with TIS620 characters: | |
85 | |
86 The difference from the ordinal Thai keyboard: | |
87 ',T_(B' and ',To(B' are assigned to '\\' and '|' respectively, | |
88 ',T#(B' and ',T%(B' are assigned to '`' and '~' respectively, | |
89 Don't know where to assign characters ',Tz(B' and ',T{(B'." | |
90 nil t t nil t) | |
91 | 124 |
92 ;; Define RULES in Quail map. In addition, create | 125 ;; Define RULES in Quail map. In addition, create |
93 ;; `thai-conconant-map' and `thai-vowel-upper-lower-alist' | 126 ;; `thai-consonant-alist-KEYBOARD-TYPE' and |
127 ;; `thai-vowel-upper-lower-alist-KEYBOARD-TYPE'. | |
128 | |
94 ;; The general composing rules are as follows: | 129 ;; The general composing rules are as follows: |
95 ;; | 130 ;; |
96 ;; T | 131 ;; T |
97 ;; V T V T | 132 ;; V T V T |
98 ;; CV -> C, CT -> C, CVT -> C, Cv -> C, CvT -> C | 133 ;; CV -> C, CT -> C, CVT -> C, Cv -> C, CvT -> C |
99 ;; v v | 134 ;; v v |
100 ;; | 135 ;; |
101 ;; where C: consonant, V: vowel upper, v: vowel lower, T: tone mark. | 136 ;; where C: consonant, V: vowel upper, v: vowel lower, T: tone mark. |
102 | 137 |
103 (defmacro thai-quail-define-rules (&rest rules) | 138 (defmacro thai-quail-define-rules (keyboard-type &rest rules) |
104 (let ((l rules) | 139 (let ((l rules) |
105 consonant-alist | 140 consonant-alist |
106 vowel-upper-lower-alist | 141 vowel-upper-lower-alist |
107 rule trans ch c-set) | 142 rule trans ch c-set) |
108 (while l | 143 (while l |
125 vowel-upper-lower-alist | 160 vowel-upper-lower-alist |
126 (cons (cons (string-to-char (car rule)) | 161 (cons (cons (string-to-char (car rule)) |
127 'thai-tone-input) | 162 'thai-tone-input) |
128 vowel-upper-lower-alist)))) | 163 vowel-upper-lower-alist)))) |
129 (setq l (cdr l))) | 164 (setq l (cdr l))) |
130 (list 'progn | 165 `(progn |
131 (cons 'quail-define-rules rules) | 166 (quail-define-rules ,@rules) |
132 `(setq thai-consonant-alist ',consonant-alist | 167 (setcar (nthcdr 2 (thai-keyboard-info ,keyboard-type)) |
133 thai-vowel-upper-lower-alist ',vowel-upper-lower-alist)))) | 168 ',consonant-alist) |
134 | 169 (setcar (nthcdr 3 (thai-keyboard-info ,keyboard-type)) |
135 (thai-quail-define-rules | 170 ',vowel-upper-lower-alist)))) |
171 | |
172 ;; Return an alist which can be a cdr part of a Quail map | |
173 ;; corresponding to the current key when Thai consonant is entered. | |
174 (defun thai-consonant-input (key len) | |
175 (let ((quail-package-name (quail-name))) | |
176 (setq thai-current-keyboard-type | |
177 (cond ((string= quail-package-name "thai-pattachote") 'pattachote) | |
178 ((string= quail-package-name "thai-kesmanee") 'kesmanee) | |
179 (t (error "Invalid Quail package %s" quail-package-name)))) | |
180 (copy-alist (nth 2 (thai-keyboard-info thai-current-keyboard-type))))) | |
181 | |
182 ;; Thai Kesmanee keyboard support. | |
183 | |
184 (quail-define-package | |
185 "thai-kesmanee" "Thai" ",T!!(B>" t | |
186 "Thai Kesmanee input method with TIS620 keyboard layout | |
187 | |
188 The difference from the ordinal Thai keyboard: | |
189 ',T_(B' and ',To(B' are assigned to '\\' and '|' respectively, | |
190 ',T#(B' and ',T%(B' are assigned to '`' and '~' respectively, | |
191 Don't know where to assign characters ',Tz(B' and ',T{(B'." | |
192 nil t t nil t nil nil nil nil nil t) | |
193 | |
194 (thai-quail-define-rules 'kesmanee | |
136 ("1" (",TE(B" . thai-consonant-input)) | 195 ("1" (",TE(B" . thai-consonant-input)) |
137 ("!" "#") | 196 ("!" "#") |
138 ("2" "/") | 197 ("2" "/") |
139 ("@" (",Tq(B" . thai-consonant-input)) | 198 ("@" ",Tq(B") |
140 ("3" "_") | 199 ("3" "_") |
141 ("#" (",Tr(B" . thai-consonant-input)) | 200 ("#" ",Tr(B") |
142 ("4" (",T@(B" . thai-consonant-input)) | 201 ("4" (",T@(B" . thai-consonant-input)) |
143 ("$" (",Ts(B" . thai-consonant-input)) | 202 ("$" ",Ts(B") |
144 ("5" (",T6(B" . thai-consonant-input)) | 203 ("5" (",T6(B" . thai-consonant-input)) |
145 ("%" (",Tt(B" . thai-consonant-input)) | 204 ("%" ",Tt(B") |
146 ("6" ",TX(B") | 205 ("6" ",TX(B") |
147 ("^" ",TY(B") | 206 ("^" ",TY(B") |
148 ("7" ",TV(B") | 207 ("7" ",TV(B") |
149 ("&" "0,TQi1(B") | 208 ("&" "0,TQi1(B") |
150 ("8" (",T$(B" . thai-consonant-input)) | 209 ("8" (",T$(B" . thai-consonant-input)) |
151 ("*" (",Tu(B" . thai-consonant-input)) | 210 ("*" ",Tu(B") |
152 ("9" (",T5(B" . thai-consonant-input)) | 211 ("9" (",T5(B" . thai-consonant-input)) |
153 ("\(" (",Tv(B" . thai-consonant-input)) | 212 ("\(" ",Tv(B") |
154 ("0" (",T((B" . thai-consonant-input)) | 213 ("0" (",T((B" . thai-consonant-input)) |
155 ("\)" (",Tw(B" . thai-consonant-input)) | 214 ("\)" ",Tw(B") |
156 ("-" (",T"(B" . thai-consonant-input)) | 215 ("-" (",T"(B" . thai-consonant-input)) |
157 ("_" (",Tx(B" . thai-consonant-input)) | 216 ("_" ",Tx(B") |
158 ("=" (",T*(B" . thai-consonant-input)) | 217 ("=" (",T*(B" . thai-consonant-input)) |
159 ("+" (",Ty(B" . thai-consonant-input)) | 218 ("+" ",Ty(B") |
160 ("\\" (",T_(B" . thai-consonant-input)) | 219 ("\\" ",T_(B") |
161 ("|" (",To(B" . thai-consonant-input)) | 220 ("|" ",To(B") |
162 ("`" (",T#(B" . thai-consonant-input)) | 221 ("`" (",T#(B" . thai-consonant-input)) |
163 ("~" (",T%(B" . thai-consonant-input)) | 222 ("~" (",T%(B" . thai-consonant-input)) |
164 ("q" ",Tf(B") | 223 ("q" ",Tf(B") |
165 ("Q" ",Tp(B") | 224 ("Q" ",Tp(B") |
166 ("w" ",Td(B") | 225 ("w" ",Td(B") |
176 ("u" ",TU(B") | 235 ("u" ",TU(B") |
177 ("U" ",Tj(B") | 236 ("U" ",Tj(B") |
178 ("i" (",TC(B" . thai-consonant-input)) | 237 ("i" (",TC(B" . thai-consonant-input)) |
179 ("I" (",T3(B" . thai-consonant-input)) | 238 ("I" (",T3(B" . thai-consonant-input)) |
180 ("o" (",T9(B" . thai-consonant-input)) | 239 ("o" (",T9(B" . thai-consonant-input)) |
181 ("O" (",TO(B" . thai-consonant-input)) | 240 ("O" ",TO(B") |
182 ("p" (",TB(B" . thai-consonant-input)) | 241 ("p" (",TB(B" . thai-consonant-input)) |
183 ("P" (",T-(B" . thai-consonant-input)) | 242 ("P" (",T-(B" . thai-consonant-input)) |
184 ("\[" (",T:(B" . thai-consonant-input)) | 243 ("\[" (",T:(B" . thai-consonant-input)) |
185 ("{" (",T0(B" . thai-consonant-input)) | 244 ("{" (",T0(B" . thai-consonant-input)) |
186 ("\]" (",TE(B" . thai-consonant-input)) | 245 ("\]" (",TE(B" . thai-consonant-input)) |
226 ("," (",TA(B" . thai-consonant-input)) | 285 ("," (",TA(B" . thai-consonant-input)) |
227 ("<" (",T2(B" . thai-consonant-input)) | 286 ("<" (",T2(B" . thai-consonant-input)) |
228 ("." ",Tc(B") | 287 ("." ",Tc(B") |
229 (">" (",TL(B" . thai-consonant-input)) | 288 (">" (",TL(B" . thai-consonant-input)) |
230 ("/" (",T=(B" . thai-consonant-input)) | 289 ("/" (",T=(B" . thai-consonant-input)) |
231 ("\"" ",TF(B") | 290 ("?" ",TF(B") |
232 ) | 291 ) |
233 | 292 |
293 | |
294 ;; Thai Pattachote keyboard support. | |
295 | |
296 (quail-define-package | |
297 "thai-pattachote" "Thai" ",T!;(B>" t | |
298 "Thai Pattachote input method with TIS620 keyboard layout" | |
299 nil t t nil t nil nil nil nil nil t) | |
300 | |
301 (thai-quail-define-rules 'pattachote | |
302 ("1" "=") | |
303 ("!" "+") | |
304 ("2" ",Tr(B") | |
305 ("@" "\"") | |
306 ("3" ",Ts(B") | |
307 ("#" "/") | |
308 ("4" ",Tt(B") | |
309 ("$" ",") | |
310 ("5" ",Tu(B") | |
311 ("%" "?") | |
312 ("6" ",TY(B") | |
313 ("^" ",TX(B") | |
314 ("7" ",Tw(B") | |
315 ("&" "_") | |
316 ("8" ",Tx(B") | |
317 ("*" ".") | |
318 ("9" ",Ty(B") | |
319 ("(" "(") | |
320 ("0" ",Tp(B") | |
321 (")" ")") | |
322 ("-" ",Tq(B") | |
323 ("_" "-") | |
324 ("=" ",Tv(B") | |
325 ("+" "%") | |
326 ("\\" ",TZ(B") | |
327 ("|" ",Tm(B") | |
328 ("`" (",T#(B" . thai-consonant-input)) | |
329 ("~" (",T%(B" . thai-consonant-input)) | |
330 | |
331 ("q" ",Tg(B") | |
332 ("Q" ",Tj(B") | |
333 ("w" (",T5(B" . thai-consonant-input)) | |
334 ("W" ",TD(B") | |
335 ("e" (",TB(B" . thai-consonant-input)) | |
336 ("E" ",Tf(B") | |
337 ("r" (",TM(B" . thai-consonant-input)) | |
338 ("R" (",T-(B" . thai-consonant-input)) | |
339 ("t" (",TC(B" . thai-consonant-input)) | |
340 ("T" (",TI(B" . thai-consonant-input)) | |
341 ("y" ",Th(B") | |
342 ("Y" ",TV(B") | |
343 ("u" (",T4(B" . thai-consonant-input)) | |
344 ("U" (",T=(B" . thai-consonant-input)) | |
345 ("i" (",TA(B" . thai-consonant-input)) | |
346 ("I" (",T+(B" . thai-consonant-input)) | |
347 ("o" (",TG(B" . thai-consonant-input)) | |
348 ("O" (",T6(B" . thai-consonant-input)) | |
349 ("p" ",Ta(B") | |
350 ("P" (",T2(B" . thai-consonant-input)) | |
351 ("\[" ",Tc(B") | |
352 ("{" ",TO(B") | |
353 ("\]" (",T2(B" . thai-consonant-input)) | |
354 ("}" ",TF(B") | |
355 | |
356 ("a" ",Ti(B") | |
357 ("A" ",Tk(B") | |
358 ("s" (",T7(B" . thai-consonant-input)) | |
359 ("S" (",T8(B" . thai-consonant-input)) | |
360 ("d" (",T'(B" . thai-consonant-input)) | |
361 ("D" ",TS(B") | |
362 ("f" (",T!(B" . thai-consonant-input)) | |
363 ("F" (",T3(B" . thai-consonant-input)) | |
364 ("g" ",TQ(B") | |
365 ("G" ",Tl(B") | |
366 ("h" ",TU(B") | |
367 ("H" ",TW(B") | |
368 ("j" ",TR(B") | |
369 ("J" (",T<(B" . thai-consonant-input)) | |
370 ("k" (",T9(B" . thai-consonant-input)) | |
371 ("K" (",T*(B" . thai-consonant-input)) | |
372 ("l" ",T`(B") | |
373 ("L" ",Tb(B") | |
374 (";" ",Td(B") | |
375 (":" (",T&(B" . thai-consonant-input)) | |
376 ("'" (",T"(B" . thai-consonant-input)) | |
377 ("\"" (",T1(B" . thai-consonant-input)) | |
378 | |
379 ("z" (",T:(B" . thai-consonant-input)) | |
380 ("Z" (",T.(B" . thai-consonant-input)) | |
381 ("x" (",T;(B" . thai-consonant-input)) | |
382 ("X" (",T.(B" . thai-consonant-input)) | |
383 ("c" (",TE(B" . thai-consonant-input)) | |
384 ("C" (",T0(B" . thai-consonant-input)) | |
385 ("v" (",TK(B" . thai-consonant-input)) | |
386 ("V" (",T@(B" . thai-consonant-input)) | |
387 ("b" ",TT(B") | |
388 ("B" ",TQ(B") | |
389 ("n" (",T$(B" . thai-consonant-input)) | |
390 ("N" (",TH(B" . thai-consonant-input)) | |
391 ("m" (",TJ(B" . thai-consonant-input)) | |
392 ("M" (",TN(B" . thai-consonant-input)) | |
393 ("," ",TP(B") | |
394 ("<" (",T?(B" . thai-consonant-input)) | |
395 ("." (",T((B" . thai-consonant-input)) | |
396 (">" (",T2(B" . thai-consonant-input)) | |
397 ("/" (",T>(B" . thai-consonant-input)) | |
398 ("?" (",TL(B" . thai-consonant-input)) | |
399 ) | |
400 | |
234 ;;; quail/thai.el ends here | 401 ;;; quail/thai.el ends here |