40710
|
1 ;;; lao.el --- Quail package for inputting Lao characters -*-coding: iso-2022-7bit;-*-
|
18673
|
2
|
75253
|
3 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
79727
|
4 ;; 2006, 2007, 2008
|
58756
|
5 ;; National Institute of Advanced Industrial Science and Technology (AIST)
|
|
6 ;; Registration Number H14PRO021
|
18673
|
7
|
|
8 ;; Keywords: multilingual, input method, Lao
|
|
9
|
|
10 ;; This file is part of GNU Emacs.
|
|
11
|
|
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
|
|
13 ;; it under the terms of the GNU General Public License as published by
|
78308
|
14 ;; the Free Software Foundation; either version 3, or (at your option)
|
18673
|
15 ;; any later version.
|
|
16
|
|
17 ;; GNU Emacs is distributed in the hope that it will be useful,
|
|
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
20 ;; GNU General Public License for more details.
|
|
21
|
|
22 ;; You should have received a copy of the GNU General Public License
|
|
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
|
64083
|
24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
25 ;; Boston, MA 02110-1301, USA.
|
18673
|
26
|
38453
|
27 ;;; Commentary:
|
|
28
|
18673
|
29 ;;; Code:
|
|
30
|
|
31 (require 'quail)
|
|
32 (require 'lao-util)
|
|
33
|
26881
|
34 (defun quail-lao-update-translation (control-flag)
|
|
35 (if (integerp control-flag)
|
|
36 ;; Non-composable character typed.
|
|
37 (setq quail-current-str
|
|
38 (buffer-substring (overlay-start quail-overlay)
|
|
39 (overlay-end quail-overlay))
|
|
40 unread-command-events
|
|
41 (string-to-list
|
|
42 (substring quail-current-key control-flag)))
|
|
43 (setq quail-current-str
|
|
44 (compose-string (quail-lookup-map-and-concat quail-current-key))))
|
|
45 control-flag)
|
18673
|
46
|
58756
|
47 (defvar lao-key-alist
|
26881
|
48 '(("!" . "1")
|
|
49 ("\"" . "=")
|
|
50 ("#" . "3")
|
|
51 ("$" . "4")
|
|
52 ("&" . "5")
|
|
53 ("%" . "(1l(B")
|
|
54 ("'" . "(1'(B")
|
|
55 ("(" . "7")
|
|
56 (")" . "8")
|
|
57 ("*" . "6")
|
|
58 ("+" . ["(1mh(B"])
|
|
59 ("," . "(1A(B")
|
|
60 ("-" . "(1*(B")
|
|
61 ("." . "(1c(B")
|
|
62 ("/" . "(1=(B")
|
|
63 ("0" . "(1"(B")
|
|
64 ("1" . "(1B(B")
|
|
65 ("2" . "(1?(B")
|
|
66 ("3" . "(1b(B")
|
|
67 ("4" . "(16(B")
|
|
68 ("5" . "(1X(B")
|
|
69 ("6" . "(1Y(B")
|
|
70 ("7" . "(1$(B")
|
|
71 ("8" . "(15(B")
|
|
72 ("9" . "(1((B")
|
|
73 (":" . "%")
|
|
74 (";" . "(1G(B")
|
|
75 ("<" . "(1}(B")
|
|
76 ("=" . "(1m(B")
|
|
77 (">" . "$")
|
|
78 ("?" . ")")
|
|
79 ("@" . "2")
|
|
80 ("A" . ["(1Qi(B"])
|
|
81 ("B" . ["(1Vi(B"])
|
|
82 ("C" . "(1O(B")
|
|
83 ("D" . ".")
|
|
84 ("E" . ["(1Si(B"])
|
|
85 ("F" . ",")
|
|
86 ("G" . ":")
|
|
87 ("H" . "(1j(B")
|
|
88 ("I" . "(1N(B")
|
|
89 ("J" . "(1k(B")
|
|
90 ("K" . "!")
|
|
91 ("L" . "?")
|
|
92 ("M" . "(1f(B")
|
|
93 ("N" . ["(1Wi(B"])
|
|
94 ("O" . "(1|(B")
|
|
95 ("P" . "(1](B")
|
|
96 ("Q" . ["(1[i(B"])
|
|
97 ("R" . "_")
|
|
98 ("S" . ";")
|
|
99 ("T" . "+")
|
|
100 ("U" . ["(1Ui(B"])
|
|
101 ("V" . "x")
|
|
102 ("W" . "0")
|
|
103 ("X" . "(")
|
|
104 ("Y" . ["(1Ti(B"])
|
|
105 ("Z" . "\"")
|
|
106 ("[" . "(1:(B")
|
|
107 ("]" . "(1E(B")
|
|
108 ("^" . "(1\(B")
|
|
109 ("_" . "9")
|
|
110 ("`" . "(1'(B")
|
|
111 ("a" . "(1Q(B")
|
|
112 ("b" . "(1V(B")
|
|
113 ("c" . "(1a(B")
|
|
114 ("d" . "(1!(B")
|
|
115 ("e" . "(1S(B")
|
|
116 ("f" . "(14(B")
|
|
117 ("g" . "(1`(B")
|
|
118 ("h" . "(1i(B")
|
|
119 ("i" . "(1C(B")
|
|
120 ("j" . "(1h(B")
|
|
121 ("k" . "(1R(B")
|
|
122 ("l" . "(1J(B")
|
|
123 ("m" . "(17(B")
|
|
124 ("n" . "(1W(B")
|
|
125 ("o" . "(19(B")
|
|
126 ("p" . "(1-(B")
|
|
127 ("q" . "(1[(B")
|
|
128 ("r" . "(1>(B")
|
|
129 ("s" . "(1K(B")
|
|
130 ("t" . "(1P(B")
|
|
131 ("u" . "(1U(B")
|
|
132 ("v" . "(1M(B")
|
|
133 ("w" . "(1d(B")
|
|
134 ("x" . "(1;(B")
|
|
135 ("y" . "(1T(B")
|
|
136 ("z" . "(1<(B")
|
|
137 ("{" . "-")
|
|
138 ("|" . ["(1K\(B"])
|
|
139 ("}" . "/")
|
|
140 ("~" . "(1l(B")
|
|
141 ("\\0" . "(1p(B")
|
|
142 ("\\1" . "(1q(B")
|
|
143 ("\\2" . "(1r(B")
|
|
144 ("\\3" . "(1s(B")
|
|
145 ("\\4" . "(1t(B")
|
|
146 ("\\5" . "(1u(B")
|
|
147 ("\\6" . "(1v(B")
|
|
148 ("\\7" . "(1w(B")
|
|
149 ("\\8" . "(1x(B")
|
|
150 ("\\9" . "(1y(B")
|
58756
|
151 )
|
|
152 "Alist of key sequences vs the corresponding Lao string to input.
|
|
153 This variable is for the input method \"lao\".
|
|
154 If you change the value of this variable while quail/lao is already loaded,
|
|
155 you need to re-load it to properly re-initialize related alists.")
|
18673
|
156
|
58756
|
157 ;; Temporary variable to initialize lao-consonant-key-alist, etc.
|
|
158 (defconst lao-key-alist-vector
|
|
159 (let ((tail lao-key-alist)
|
|
160 consonant-key-alist semivowel-key-alist vowel-key-alist
|
|
161 voweltone-key-alist tone-key-alist other-key-alist
|
|
162 elt phonetic-type)
|
|
163 (while tail
|
|
164 (setq elt (car tail) tail (cdr tail))
|
|
165 (if (stringp (cdr elt))
|
|
166 (setq phonetic-type (get-char-code-property (aref (cdr elt) 0)
|
|
167 'phonetic-type))
|
|
168 (setq phonetic-type (get-char-code-property (aref (aref (cdr elt) 0) 0)
|
26881
|
169 'phonetic-type))
|
58756
|
170 (aset (cdr elt) 0 (compose-string (aref (cdr elt) 0))))
|
|
171 (cond ((eq phonetic-type 'consonant)
|
|
172 (setq consonant-key-alist (cons elt consonant-key-alist)))
|
|
173 ((memq phonetic-type '(vowel-upper vowel-lower))
|
|
174 (if (stringp (cdr elt))
|
|
175 (setq vowel-key-alist (cons elt vowel-key-alist))
|
|
176 (setq voweltone-key-alist (cons elt voweltone-key-alist))))
|
|
177 ((eq phonetic-type 'tone)
|
|
178 (setq tone-key-alist (cons elt tone-key-alist)))
|
|
179 ((eq phonetic-type 'semivowel-lower)
|
|
180 (setq semivowel-key-alist (cons elt semivowel-key-alist)))
|
|
181 (t
|
|
182 (setq other-key-alist (cons elt other-key-alist)))))
|
|
183 (vector consonant-key-alist semivowel-key-alist vowel-key-alist
|
|
184 voweltone-key-alist tone-key-alist other-key-alist)))
|
|
185
|
|
186 (defconst lao-consonant-key-alist (aref lao-key-alist-vector 0))
|
|
187 (defconst lao-semivowel-key-alist (aref lao-key-alist-vector 1))
|
|
188 (defconst lao-vowel-key-alist (aref lao-key-alist-vector 2))
|
|
189 (defconst lao-voweltone-key-alist (aref lao-key-alist-vector 3))
|
|
190 (defconst lao-tone-key-alist (aref lao-key-alist-vector 4))
|
|
191 (defconst lao-other-key-alist (aref lao-key-alist-vector 5))
|
|
192
|
|
193 ;; Done with it.
|
|
194 (makunbound 'lao-key-alist-vector)
|
18673
|
195
|
|
196 (quail-define-package
|
19261
|
197 "lao" "Lao" "(1E(B" t
|
18673
|
198 "Lao input method simulating Lao keyboard layout based on Thai TIS620"
|
26881
|
199 nil t t t t nil nil nil 'quail-lao-update-translation nil t)
|
18673
|
200
|
26881
|
201 (quail-install-map
|
|
202 (quail-map-from-table
|
|
203 '((base-state (lao-consonant-key-alist . svt-state)
|
|
204 lao-vowel-key-alist
|
|
205 lao-voweltone-key-alist
|
|
206 lao-tone-key-alist
|
|
207 lao-other-key-alist)
|
|
208 (svt-state (lao-semivowel-key-alist . v-state)
|
87167
|
209 (lao-vowel-key-alist . t-state)
|
|
210 lao-voweltone-key-alist
|
|
211 lao-tone-key-alist)
|
26881
|
212 (v-state (lao-vowel-key-alist . t-state))
|
|
213 (t-state lao-tone-key-alist))))
|
18673
|
214
|
52401
|
215 ;;; arch-tag: 23863a30-a8bf-402c-b7ce-c517a7aa8570
|
38453
|
216 ;;; lao.el ends here
|