]> code.delx.au - gnu-emacs/blob - leim/quail/thai.el
Trailing whitespace deleted.
[gnu-emacs] / leim / quail / thai.el
1 ;;; thai.el --- Quail package for inputting Thai characters
2
3 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
4 ;; Licensed to the Free Software Foundation.
5
6 ;; Keywords: multilingual, input method, Thai
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 ;;; Code:
28
29 (require 'quail)
30 (require 'thai-util)
31
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))
38 unread-command-events
39 (string-to-list
40 (substring quail-current-key control-flag)))
41 (setq quail-current-str
42 (compose-string (quail-lookup-map-and-concat quail-current-key))))
43 control-flag)
44
45 (defun thai-generate-quail-map (translation-table)
46 (let ((i 0)
47 consonant vowel tone voweltone others)
48 ;; Categorize Thai characters into one of above.
49 (while (< i 128)
50 (let ((trans (aref translation-table i))
51 ptype)
52 (if (eq trans 0)
53 nil
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))
59 (setq ptype 'vowel))
60 ((not (memq ptype '(consonant tone)))
61 (setq ptype 'others))))
62 (set ptype (cons (cons (char-to-string i) trans)
63 (symbol-value ptype)))))
64 (setq i (1+ i)))
65
66 (quail-map-from-table
67 '((base-state (consonant . vt-state)
68 vowel tone voweltone others)
69 (vt-state (vowel . t-state)
70 voweltone tone)
71 (t-state tone)))))
72
73 ;; Thai Kesmanee keyboard support.
74
75 (quail-define-package
76 "thai-kesmanee" "Thai" "\e,T!!\e(B>" t
77 "Thai Kesmanee input method with TIS620 keyboard layout
78
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)
84
85 (quail-install-map
86 (thai-generate-quail-map
87 [
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
102 ]))
103
104
105 \f
106 ;; Thai Pattachote keyboard support.
107
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)
112
113 (quail-install-map
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
129 ]))
130
131 ;;; thai.el ends here