Commit | Line | Data |
---|---|---|
123f4a5e | 1 | ;;; lao.el --- Quail package for inputting Lao characters -*-coding: iso-2022-7bit;-*- |
24b31c88 | 2 | |
03ba6797 | 3 | ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, |
5df4f04c | 4 | ;; 2006, 2007, 2008, 2009, 2010, 2011 |
a3341d3c KH |
5 | ;; National Institute of Advanced Industrial Science and Technology (AIST) |
6 | ;; Registration Number H14PRO021 | |
24b31c88 KH |
7 | |
8 | ;; Keywords: multilingual, input method, Lao | |
9 | ||
10 | ;; This file is part of GNU Emacs. | |
11 | ||
3d544458 | 12 | ;; GNU Emacs is free software: you can redistribute it and/or modify |
24b31c88 | 13 | ;; it under the terms of the GNU General Public License as published by |
3d544458 GM |
14 | ;; the Free Software Foundation, either version 3 of the License, or |
15 | ;; (at your option) any later version. | |
24b31c88 KH |
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 | |
3d544458 | 23 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
24b31c88 | 24 | |
be567141 PJ |
25 | ;;; Commentary: |
26 | ||
24b31c88 KH |
27 | ;;; Code: |
28 | ||
29 | (require 'quail) | |
30 | (require 'lao-util) | |
31 | ||
653b6bad KH |
32 | (defun quail-lao-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 | ||
a3341d3c | 45 | (defvar lao-key-alist |
653b6bad KH |
46 | '(("!" . "1") |
47 | ("\"" . "=") | |
48 | ("#" . "3") | |
49 | ("$" . "4") | |
50 | ("&" . "5") | |
51 | ("%" . "\e(1l\e(B") | |
52 | ("'" . "\e(1'\e(B") | |
53 | ("(" . "7") | |
54 | (")" . "8") | |
55 | ("*" . "6") | |
56 | ("+" . ["\e(1mh\e(B"]) | |
57 | ("," . "\e(1A\e(B") | |
58 | ("-" . "\e(1*\e(B") | |
59 | ("." . "\e(1c\e(B") | |
60 | ("/" . "\e(1=\e(B") | |
61 | ("0" . "\e(1"\e(B") | |
62 | ("1" . "\e(1B\e(B") | |
63 | ("2" . "\e(1?\e(B") | |
64 | ("3" . "\e(1b\e(B") | |
65 | ("4" . "\e(16\e(B") | |
66 | ("5" . "\e(1X\e(B") | |
67 | ("6" . "\e(1Y\e(B") | |
68 | ("7" . "\e(1$\e(B") | |
69 | ("8" . "\e(15\e(B") | |
70 | ("9" . "\e(1(\e(B") | |
71 | (":" . "%") | |
72 | (";" . "\e(1G\e(B") | |
73 | ("<" . "\e(1}\e(B") | |
74 | ("=" . "\e(1m\e(B") | |
75 | (">" . "$") | |
76 | ("?" . ")") | |
77 | ("@" . "2") | |
78 | ("A" . ["\e(1Qi\e(B"]) | |
79 | ("B" . ["\e(1Vi\e(B"]) | |
80 | ("C" . "\e(1O\e(B") | |
81 | ("D" . ".") | |
82 | ("E" . ["\e(1Si\e(B"]) | |
83 | ("F" . ",") | |
84 | ("G" . ":") | |
85 | ("H" . "\e(1j\e(B") | |
86 | ("I" . "\e(1N\e(B") | |
87 | ("J" . "\e(1k\e(B") | |
88 | ("K" . "!") | |
89 | ("L" . "?") | |
90 | ("M" . "\e(1f\e(B") | |
91 | ("N" . ["\e(1Wi\e(B"]) | |
92 | ("O" . "\e(1|\e(B") | |
93 | ("P" . "\e(1]\e(B") | |
94 | ("Q" . ["\e(1[i\e(B"]) | |
95 | ("R" . "_") | |
96 | ("S" . ";") | |
97 | ("T" . "+") | |
98 | ("U" . ["\e(1Ui\e(B"]) | |
99 | ("V" . "x") | |
100 | ("W" . "0") | |
101 | ("X" . "(") | |
102 | ("Y" . ["\e(1Ti\e(B"]) | |
103 | ("Z" . "\"") | |
104 | ("[" . "\e(1:\e(B") | |
105 | ("]" . "\e(1E\e(B") | |
106 | ("^" . "\e(1\\e(B") | |
107 | ("_" . "9") | |
108 | ("`" . "\e(1'\e(B") | |
109 | ("a" . "\e(1Q\e(B") | |
110 | ("b" . "\e(1V\e(B") | |
111 | ("c" . "\e(1a\e(B") | |
112 | ("d" . "\e(1!\e(B") | |
113 | ("e" . "\e(1S\e(B") | |
114 | ("f" . "\e(14\e(B") | |
115 | ("g" . "\e(1`\e(B") | |
116 | ("h" . "\e(1i\e(B") | |
117 | ("i" . "\e(1C\e(B") | |
118 | ("j" . "\e(1h\e(B") | |
119 | ("k" . "\e(1R\e(B") | |
120 | ("l" . "\e(1J\e(B") | |
121 | ("m" . "\e(17\e(B") | |
122 | ("n" . "\e(1W\e(B") | |
123 | ("o" . "\e(19\e(B") | |
124 | ("p" . "\e(1-\e(B") | |
125 | ("q" . "\e(1[\e(B") | |
126 | ("r" . "\e(1>\e(B") | |
127 | ("s" . "\e(1K\e(B") | |
128 | ("t" . "\e(1P\e(B") | |
129 | ("u" . "\e(1U\e(B") | |
130 | ("v" . "\e(1M\e(B") | |
131 | ("w" . "\e(1d\e(B") | |
132 | ("x" . "\e(1;\e(B") | |
133 | ("y" . "\e(1T\e(B") | |
134 | ("z" . "\e(1<\e(B") | |
135 | ("{" . "-") | |
136 | ("|" . ["\e(1K\\e(B"]) | |
137 | ("}" . "/") | |
138 | ("~" . "\e(1l\e(B") | |
139 | ("\\0" . "\e(1p\e(B") | |
140 | ("\\1" . "\e(1q\e(B") | |
141 | ("\\2" . "\e(1r\e(B") | |
142 | ("\\3" . "\e(1s\e(B") | |
143 | ("\\4" . "\e(1t\e(B") | |
144 | ("\\5" . "\e(1u\e(B") | |
145 | ("\\6" . "\e(1v\e(B") | |
146 | ("\\7" . "\e(1w\e(B") | |
147 | ("\\8" . "\e(1x\e(B") | |
148 | ("\\9" . "\e(1y\e(B") | |
a3341d3c KH |
149 | ) |
150 | "Alist of key sequences vs the corresponding Lao string to input. | |
151 | This variable is for the input method \"lao\". | |
152 | If you change the value of this variable while quail/lao is already loaded, | |
153 | you need to re-load it to properly re-initialize related alists.") | |
154 | ||
155 | ;; Temporary variable to initialize lao-consonant-key-alist, etc. | |
156 | (defconst lao-key-alist-vector | |
157 | (let ((tail lao-key-alist) | |
158 | consonant-key-alist semivowel-key-alist vowel-key-alist | |
159 | voweltone-key-alist tone-key-alist other-key-alist | |
160 | elt phonetic-type) | |
161 | (while tail | |
162 | (setq elt (car tail) tail (cdr tail)) | |
163 | (if (stringp (cdr elt)) | |
164 | (setq phonetic-type (get-char-code-property (aref (cdr elt) 0) | |
165 | 'phonetic-type)) | |
166 | (setq phonetic-type (get-char-code-property (aref (aref (cdr elt) 0) 0) | |
653b6bad | 167 | 'phonetic-type)) |
a3341d3c KH |
168 | (aset (cdr elt) 0 (compose-string (aref (cdr elt) 0)))) |
169 | (cond ((eq phonetic-type 'consonant) | |
170 | (setq consonant-key-alist (cons elt consonant-key-alist))) | |
171 | ((memq phonetic-type '(vowel-upper vowel-lower)) | |
172 | (if (stringp (cdr elt)) | |
173 | (setq vowel-key-alist (cons elt vowel-key-alist)) | |
174 | (setq voweltone-key-alist (cons elt voweltone-key-alist)))) | |
175 | ((eq phonetic-type 'tone) | |
176 | (setq tone-key-alist (cons elt tone-key-alist))) | |
177 | ((eq phonetic-type 'semivowel-lower) | |
178 | (setq semivowel-key-alist (cons elt semivowel-key-alist))) | |
179 | (t | |
180 | (setq other-key-alist (cons elt other-key-alist))))) | |
181 | (vector consonant-key-alist semivowel-key-alist vowel-key-alist | |
182 | voweltone-key-alist tone-key-alist other-key-alist))) | |
183 | ||
184 | (defconst lao-consonant-key-alist (aref lao-key-alist-vector 0)) | |
185 | (defconst lao-semivowel-key-alist (aref lao-key-alist-vector 1)) | |
186 | (defconst lao-vowel-key-alist (aref lao-key-alist-vector 2)) | |
187 | (defconst lao-voweltone-key-alist (aref lao-key-alist-vector 3)) | |
188 | (defconst lao-tone-key-alist (aref lao-key-alist-vector 4)) | |
189 | (defconst lao-other-key-alist (aref lao-key-alist-vector 5)) | |
190 | ||
191 | ;; Done with it. | |
192 | (makunbound 'lao-key-alist-vector) | |
24b31c88 KH |
193 | |
194 | (quail-define-package | |
486aa609 | 195 | "lao" "Lao" "\e(1E\e(B" t |
24b31c88 | 196 | "Lao input method simulating Lao keyboard layout based on Thai TIS620" |
653b6bad KH |
197 | nil t t t t nil nil nil 'quail-lao-update-translation nil t) |
198 | ||
199 | (quail-install-map | |
200 | (quail-map-from-table | |
201 | '((base-state (lao-consonant-key-alist . svt-state) | |
202 | lao-vowel-key-alist | |
203 | lao-voweltone-key-alist | |
204 | lao-tone-key-alist | |
205 | lao-other-key-alist) | |
206 | (svt-state (lao-semivowel-key-alist . v-state) | |
3d587afd KH |
207 | (lao-vowel-key-alist . t-state) |
208 | lao-voweltone-key-alist | |
209 | lao-tone-key-alist) | |
653b6bad KH |
210 | (v-state (lao-vowel-key-alist . t-state)) |
211 | (t-state lao-tone-key-alist)))) | |
24b31c88 | 212 | |
be567141 | 213 | ;;; lao.el ends here |