1 ;;; thai.el --- Quail package for inputting Thai characters
3 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
4 ;; Licensed to the Free Software Foundation.
6 ;; Keywords: multilingual, input method, Thai
8 ;; This file is part of GNU Emacs.
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)
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.
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.
32 (defun quail-thai-update-translation (control-flag)
33 (if (integerp control-flag
)
34 ;; Non-composable character typed.
35 (setq quail-current-str
36 (buffer-substring (overlay-start quail-overlay
)
37 (overlay-end quail-overlay
))
40 (substring quail-current-key control-flag
)))
41 (setq quail-current-str
42 (compose-string (quail-lookup-map-and-concat quail-current-key
))))
45 (defun thai-generate-quail-map (translation-table)
47 consonant vowel tone voweltone others
)
48 ;; Categorize Thai characters into one of above.
50 (let ((trans (aref translation-table i
))
54 (if (> (length trans
) 1)
55 (setq ptype
'voweltone
56 trans
(vector (compose-string trans
)))
57 (setq ptype
(get-char-code-property (aref trans
0) 'phonetic-type
))
58 (cond ((memq ptype
'(vowel-upper vowel-lower
))
60 ((not (memq ptype
'(consonant tone
)))
61 (setq ptype
'others
))))
62 (set ptype
(cons (cons (char-to-string i
) trans
)
63 (symbol-value ptype
)))))
67 '((base-state (consonant . vt-state
)
68 vowel tone voweltone others
)
69 (vt-state (vowel . t-state
)
73 ;; Thai Kesmanee keyboard support.
76 "thai-kesmanee" "Thai" "\e,T!!\e(B>" t
77 "Thai Kesmanee input method with TIS620 keyboard layout
79 The difference from the ordinal Thai keyboard:
80 '\e,T_\e(B' and '\e,To\e(B' are assigned to '\\' and '|' respectively,
81 '\e,T#\e(B' and '\e,T%\e(B' are assigned to '`' and '~' respectively,
82 Don't know where to assign characters '\e,Tz\e(B' and '\e,T{\e(B'."
83 nil t t t t nil nil nil
'quail-thai-update-translation nil t
)
86 (thai-generate-quail-map
88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes
89 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes
90 0 "#" "." "\e,Tr\e(B" "\e,Ts\e(B" "\e,Tt\e(B" "\e,TQi\e(B" "\e,T'\e(B" ; SPC .. '
91 "\e,Tv\e(B" "\e,Tw\e(B" "\e,Tu\e(B" "\e,Ty\e(B" "\e,TA\e(B" "\e,T"\e(B" "\e,Tc
\e(B" "\e,T
=\e(B" ; ( .. /
92 "\e,T
(\e(B" "\e,TE
\e(B" "/" "_
" "\e,T
@\e(B" "\e,T6
\e(B" "\e,TX
\e(B" "\e,TV
\e(B" ; 0 .. 7
93 "\e,T$
\e(B" "\e,T5
\e(B" "\e,T
+\e(B" "\e,TG
\e(B" "\e,T2
\e(B" "\e,T
*\e(B" "\e,TL
\e(B" "\e,TF
\e(B" ; 8 .. ?
94 "\e,Tq
\e(B" "\e,TD
\e(B" "\e,TZ
\e(B" "\e,T
)\e(B" "\e,T
/\e(B" "\e,T.
\e(B" "\e,Tb
\e(B" "\e,T
,\e(B" ; @ .. G
95 "\e,Tg
\e(B" "\e,T3
\e(B" "\e,Tk
\e(B" "\e,TI
\e(B" "\e,TH
\e(B" "\e,Tn
\e(B" "\e,Tl
\e(B" "\e,TO
\e(B" ; H .. O
96 "\e,T-
\e(B" "\e,Tp
\e(B" "\e,T1
\e(B" "\e,T
&\e(B" "\e,T8
\e(B" "\e,Tj
\e(B" "\e,TN
\e(B" "\"" ; P .. W
97 ")" "\e,Tm
\e(B" "(" "\e,T
:\e(B" "\e,T_
\e(B" "\e,TE
\e(B" "\e,TY
\e(B" "\e,Tx
\e(B" ; X .. _
98 "\e,T
#\e(B" "\e,T?
\e(B" "\e,TT
\e(B" "\e,Ta
\e(B" "\e,T
!\e(B" "\e,TS
\e(B" "\e,T4
\e(B" "\e,T
`\e(B" ; ` .. g
99 "\e,Ti
\e(B" "\e,TC
\e(B" "\e,Th
\e(B" "\e,TR
\e(B" "\e,TJ
\e(B" "\e,T7
\e(B" "\e,TW
\e(B" "\e,T9
\e(B" ; h .. o
100 "\e,TB
\e(B" "\e,Tf
\e(B" "\e,T
>\e(B" "\e,TK
\e(B" "\e,TP
\e(B" "\e,TU
\e(B" "\e,TM
\e(B" "\e,Td
\e(B" ; p .. w
101 "\e,T
;\e(B" "\e,TQ\e(B" "\e,T<\e(B" "\e,T0\e(B" "\e,To\e(B" "," "\e,T%\e(B" 0 ; x .. DEL
106 ;; Thai Pattachote keyboard support.
108 (quail-define-package
109 "thai-pattachote" "Thai" "\e,T!;\e(B>" t
110 "Thai Pattachote input method with TIS620 keyboard layout"
111 nil t t t t nil nil nil
'quail-thai-update-translation nil t
)
114 (thai-generate-quail-map
115 [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes
116 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes
117 0 "+" "\e,T1\e(B" "/" "," "?" "_" "\e,T"\e(B" ; SPC .. '
118 "(" ")" ".
" "%
" "\e,TP
\e(B" "\e,Tq
\e(B" "\e,T
(\e(B" "\e,T
>\e(B" ; ( .. /
119 "\e,Tp
\e(B" "=" "\e,Tr
\e(B" "\e,Ts
\e(B" "\e,Tt
\e(B" "\e,Tu
\e(B" "\e,TY
\e(B" "\e,Tw
\e(B" ; 0 .. 7
120 "\e,Tx
\e(B" "\e,Ty
\e(B" "\e,T
&\e(B" "\e,Td
\e(B" "\e,T?
\e(B" "\e,Tv
\e(B" "\e,T2
\e(B" "\e,TL
\e(B" ; 8 .. ?
121 "\"" "\e,Tk
\e(B" "\e,TQ
\e(B" "\e,T0
\e(B" "\e,TS
\e(B" "\e,Tf
\e(B" "\e,T3
\e(B" "\e,Tl
\e(B" ; @ .. G
122 "\e,TW
\e(B" "\e,T
+\e(B" "\e,T
<\e(B" "\e,T
*\e(B" "\e,Tb
\e(B" "\e,TN
\e(B" "\e,TH
\e(B" "\e,T6
\e(B" ; H .. O
123 "\e,T2
\e(B" "\e,Tj
\e(B" "\e,T-
\e(B" "\e,T8
\e(B" "\e,TI
\e(B" "\e,T
=\e(B" "\e,T
@\e(B" "\e,TD
\e(B" ; P .. W
124 "\e,T.
\e(B" "\e,TV
\e(B" "\e,T.
\e(B" "\e,Tc
\e(B" "\e,TZ
\e(B" "\e,T2
\e(B" "\e,TX
\e(B" "-
" ; X .. _
125 "\e,T
#\e(B" "\e,Ti
\e(B" "\e,TT
\e(B" "\e,TE
\e(B" "\e,T
'\e(B" "\e,TB
\e(B" "\e,T
!\e(B" "\e,TQ
\e(B" ; ` .. g
126 "\e,TU
\e(B" "\e,TA
\e(B" "\e,TR
\e(B" "\e,T9
\e(B" "\e,T
`\e(B" "\e,TJ
\e(B" "\e,T$
\e(B" "\e,TG
\e(B" ; h .. o
127 "\e,Ta
\e(B" "\e,Tg
\e(B" "\e,TM
\e(B" "\e,T7
\e(B" "\e,TC
\e(B" "\e,T4
\e(B" "\e,TK
\e(B" "\e,T5
\e(B" ; p .. w
128 "\e,T
;\e(B" "\e,Th\e(B" "\e,T:\e(B" "\e,TO\e(B" "\e,Tm\e(B" "\e,TF\e(B" "\e,T%\e(B" 0 ; x .. DEL
131 ;;; thai.el ends here