Merge from emacs--devo--0
[bpt/emacs.git] / leim / quail / lao.el
CommitLineData
123f4a5e 1;;; lao.el --- Quail package for inputting Lao characters -*-coding: iso-2022-7bit;-*-
24b31c88 2
03ba6797
GM
3;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
4;; 2006, 2007
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
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
14;; the Free Software Foundation; either version 2, or (at your option)
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
364c38d3
LK
24;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
25;; Boston, MA 02110-1301, USA.
24b31c88 26
be567141
PJ
27;;; Commentary:
28
24b31c88
KH
29;;; Code:
30
31(require 'quail)
32(require 'lao-util)
33
653b6bad
KH
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)
46
a3341d3c 47(defvar lao-key-alist
653b6bad
KH
48 '(("!" . "1")
49 ("\"" . "=")
50 ("#" . "3")
51 ("$" . "4")
52 ("&" . "5")
53 ("%" . "\e(1l\e(B")
54 ("'" . "\e(1'\e(B")
55 ("(" . "7")
56 (")" . "8")
57 ("*" . "6")
58 ("+" . ["\e(1mh\e(B"])
59 ("," . "\e(1A\e(B")
60 ("-" . "\e(1*\e(B")
61 ("." . "\e(1c\e(B")
62 ("/" . "\e(1=\e(B")
63 ("0" . "\e(1"\e(B")
64 ("1" . "\e(1B\e(B")
65 ("2" . "\e(1?\e(B")
66 ("3" . "\e(1b\e(B")
67 ("4" . "\e(16\e(B")
68 ("5" . "\e(1X\e(B")
69 ("6" . "\e(1Y\e(B")
70 ("7" . "\e(1$\e(B")
71 ("8" . "\e(15\e(B")
72 ("9" . "\e(1(\e(B")
73 (":" . "%")
74 (";" . "\e(1G\e(B")
75 ("<" . "\e(1}\e(B")
76 ("=" . "\e(1m\e(B")
77 (">" . "$")
78 ("?" . ")")
79 ("@" . "2")
80 ("A" . ["\e(1Qi\e(B"])
81 ("B" . ["\e(1Vi\e(B"])
82 ("C" . "\e(1O\e(B")
83 ("D" . ".")
84 ("E" . ["\e(1Si\e(B"])
85 ("F" . ",")
86 ("G" . ":")
87 ("H" . "\e(1j\e(B")
88 ("I" . "\e(1N\e(B")
89 ("J" . "\e(1k\e(B")
90 ("K" . "!")
91 ("L" . "?")
92 ("M" . "\e(1f\e(B")
93 ("N" . ["\e(1Wi\e(B"])
94 ("O" . "\e(1|\e(B")
95 ("P" . "\e(1]\e(B")
96 ("Q" . ["\e(1[i\e(B"])
97 ("R" . "_")
98 ("S" . ";")
99 ("T" . "+")
100 ("U" . ["\e(1Ui\e(B"])
101 ("V" . "x")
102 ("W" . "0")
103 ("X" . "(")
104 ("Y" . ["\e(1Ti\e(B"])
105 ("Z" . "\"")
106 ("[" . "\e(1:\e(B")
107 ("]" . "\e(1E\e(B")
108 ("^" . "\e(1\\e(B")
109 ("_" . "9")
110 ("`" . "\e(1'\e(B")
111 ("a" . "\e(1Q\e(B")
112 ("b" . "\e(1V\e(B")
113 ("c" . "\e(1a\e(B")
114 ("d" . "\e(1!\e(B")
115 ("e" . "\e(1S\e(B")
116 ("f" . "\e(14\e(B")
117 ("g" . "\e(1`\e(B")
118 ("h" . "\e(1i\e(B")
119 ("i" . "\e(1C\e(B")
120 ("j" . "\e(1h\e(B")
121 ("k" . "\e(1R\e(B")
122 ("l" . "\e(1J\e(B")
123 ("m" . "\e(17\e(B")
124 ("n" . "\e(1W\e(B")
125 ("o" . "\e(19\e(B")
126 ("p" . "\e(1-\e(B")
127 ("q" . "\e(1[\e(B")
128 ("r" . "\e(1>\e(B")
129 ("s" . "\e(1K\e(B")
130 ("t" . "\e(1P\e(B")
131 ("u" . "\e(1U\e(B")
132 ("v" . "\e(1M\e(B")
133 ("w" . "\e(1d\e(B")
134 ("x" . "\e(1;\e(B")
135 ("y" . "\e(1T\e(B")
136 ("z" . "\e(1<\e(B")
137 ("{" . "-")
138 ("|" . ["\e(1K\\e(B"])
139 ("}" . "/")
140 ("~" . "\e(1l\e(B")
141 ("\\0" . "\e(1p\e(B")
142 ("\\1" . "\e(1q\e(B")
143 ("\\2" . "\e(1r\e(B")
144 ("\\3" . "\e(1s\e(B")
145 ("\\4" . "\e(1t\e(B")
146 ("\\5" . "\e(1u\e(B")
147 ("\\6" . "\e(1v\e(B")
148 ("\\7" . "\e(1w\e(B")
149 ("\\8" . "\e(1x\e(B")
150 ("\\9" . "\e(1y\e(B")
a3341d3c
KH
151 )
152 "Alist of key sequences vs the corresponding Lao string to input.
153This variable is for the input method \"lao\".
154If you change the value of this variable while quail/lao is already loaded,
155you need to re-load it to properly re-initialize related alists.")
156
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)
653b6bad 169 'phonetic-type))
a3341d3c
KH
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)
24b31c88
KH
195
196(quail-define-package
486aa609 197 "lao" "Lao" "\e(1E\e(B" t
24b31c88 198 "Lao input method simulating Lao keyboard layout based on Thai TIS620"
653b6bad
KH
199 nil t t t t nil nil nil 'quail-lao-update-translation nil t)
200
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)
209 (lao-vowel-key-alist . t-state)
210 lao-voweltone-key-alist)
211 (v-state (lao-vowel-key-alist . t-state))
212 (t-state lao-tone-key-alist))))
24b31c88 213
ab5796a9 214;;; arch-tag: 23863a30-a8bf-402c-b7ce-c517a7aa8570
be567141 215;;; lao.el ends here