Commit | Line | Data |
---|---|---|
be567141 | 1 | ;;; thai.el --- Quail package for inputting Thai characters |
24b31c88 KH |
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 | ||
be567141 PJ |
25 | ;;; Commentary: |
26 | ||
24b31c88 KH |
27 | ;;; Code: |
28 | ||
29 | (require 'quail) | |
30 | (require 'thai-util) | |
31 | ||
653b6bad KH |
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 | |
41c939cf | 56 | trans (vector (compose-string trans))) |
653b6bad KH |
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))))) | |
24b31c88 | 72 | |
24b31c88 KH |
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'." | |
7c10feb1 | 83 | nil t t t t nil nil nil 'quail-thai-update-translation nil t) |
653b6bad | 84 | |
177c0ea7 | 85 | (quail-install-map |
653b6bad KH |
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 | |
df3595f8 | 90 | 0 "#" "." "\e,Tr\e(B" "\e,Ts\e(B" "\e,Tt\e(B" "\e,TQi\e(B" "\e,T'\e(B" ; SPC .. ' |
653b6bad KH |
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 | |
df3595f8 | 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 |
653b6bad | 102 | ])) |
24b31c88 | 103 | |
24b31c88 KH |
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" | |
7c10feb1 | 111 | nil t t t t nil nil nil 'quail-thai-update-translation nil t) |
653b6bad | 112 | |
177c0ea7 | 113 | (quail-install-map |
653b6bad KH |
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 | ])) | |
be567141 PJ |
130 | |
131 | ;;; thai.el ends here |