comparison lisp/leim/quail/lao.el @ 155:43dd3413c7c7 r20-3b4

Import from CVS: tag r20-3b4
author cvs
date Mon, 13 Aug 2007 09:39:39 +0200
parents
children acd284d43ca1
comparison
equal deleted inserted replaced
154:94141801dd7e 155:43dd3413c7c7
1 ;;; quail/lao.el --- Quail package for inputting Lao characters
2
3 ;; Copyright (C) 1997 Free Software Foundation, Inc.
4 ;; Copyright (C) 1997 Electrotechnical Laboratory, JAPAN.
5
6 ;; Keywords: multilingual, input method, Lao
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
22 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23
24 ;;; Code:
25
26 (require 'quail)
27 (require 'language/lao-util)
28
29 (eval-and-compile
30
31 (defconst lao-keyboard-mapping
32 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes
33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; control codes
34 0 "1" "=" "3" "4" "(1l(B" "5" "(1'(B" ; SPC .. '
35 "7" "8" "6" "(1mh(B" "(1A(B" "9" "(1c(B" "(1=(B" ; ( .. /
36 "(1"(B" "(1B(B" "(1?(B" "(1b(B" "(16(B" "(1X(B" "(1Y(B" "(1$(B" ; 0 .. 7
37 "(15(B" "(1((B" "%" "(1G(B" "(1}(B" "(1m(B" ">" "\)" ; 8 .. ?
38 "2" "(1Qi(B" "(1Vi(B" "(1O(B" "." "(1Si(B" "," ":" ; @ .. G
39 "(1j(B" "(1N(B" "(1k(B" "!" "?" "(1f(B" "(1Wi(B" "(1|(B" ; H .. O
40 "(1](B" "(1[i(B" "_" ";" "+" "(1Ui(B" "x" "0" ; P .. W
41 "\(" "(1Ti(B" "\"" "(1:(B" 0 "(1E(B" "(1\(B" "(1*(B" ; X .. _
42 "(1'(B" "(1Q(B" "(1V(B" "(1a(B" "(1!(B" "(1S(B" "(14(B" "(1`(B" ; ` .. g
43 "(1i(B" "(1C(B" "(1h(B" "(1R(B" "(1J(B" "(17(B" "(1W(B" "(19(B" ; h .. o
44 "(1-(B" "(1[(B" "(1>(B" "(1K(B" "(1P(B" "(1U(B" "(1M(B" "(1d(B" ; p .. w
45 "(1;(B" "(1T(B" "(1<(B" "-" "(1K\(B" "/" "~" 0] ; x .. DEL
46 "A table which maps ASCII key codes to corresponding Lao characters."
47 )
48
49 )
50
51 ;; Template of a cdr part of a Quail map when a consonant is entered.
52 (defvar lao-consonant-alist nil)
53 ;; Template of a cdr part of a Quail map when a vowel upper is entered.
54 (defvar lao-vowel-upper-alist nil)
55 ;; Template of a cdr part of a Quail map when a vowel lower is entered.
56 (defvar lao-vowel-lower-alist nil)
57 ;; Template of a cdr part of a Quail map when a semivowel lower is entered.
58 (defvar lao-semivowel-lower-alist nil)
59
60 ;; Return a Quail map corresponding to KEY of length LEN.
61 ;; The car part of the map is a translation generated automatically.
62 ;; The cdr part of the map is a copy of ALIST.
63 (defun lao-generate-quail-map (key len alist)
64 (let ((str "")
65 (idx 0))
66 (while (< idx len)
67 (setq str (concat str (aref lao-keyboard-mapping (aref key idx)))
68 idx (1+ idx)))
69 (cons (string-to-char (compose-string str)) (copy-alist alist))))
70
71 ;; Return a Quail map corresponding to KEY of length LEN when Lao
72 ;; tone mark is entered.
73 (defun lao-tone-input (key len)
74 (lao-generate-quail-map key len nil))
75
76 ;; Return a Quail map corresponding to KEY of length LEN when Lao
77 ;; vowel upper is entered.
78 (defun lao-vowel-upper-input (key len)
79 (lao-generate-quail-map key len lao-vowel-upper-alist))
80
81 ;; Return a Quail map corresponding to KEY of length LEN when Lao
82 ;; vowel lower is entered.
83 (defun lao-vowel-lower-input (key len)
84 (lao-generate-quail-map key len lao-vowel-lower-alist))
85
86 ;; Return a Quail map corresponding to KEY of length LEN when Lao
87 ;; semivowel lower is entered.
88 (defun lao-semivowel-lower-input (key len)
89 (lao-generate-quail-map key len lao-semivowel-lower-alist))
90
91 ;; Return an alist which can be a cdr part of a Quail map
92 ;; corresponding to the current key when Lao consonant is entered.
93 (defun lao-consonant-input (key len)
94 (copy-alist lao-consonant-alist))
95
96 (quail-define-package "quail-lao" "Lao" "Lao" t
97 "Lao input method with TIS620 characters:"
98 nil t t t t)
99
100 (defmacro lao-quail-define-rules (&rest rules)
101 (let ((l rules)
102 consonant-alist
103 vowel-upper-alist
104 vowel-lower-alist
105 semivowel-lower-alist
106 rule trans ch c-set)
107 (while l
108 (setq rule (car l))
109 (setq trans (nth 1 rule))
110 (if (consp trans)
111 (setq trans (car trans)))
112 (setq c-set (char-category-set (string-to-char trans)))
113 (cond ((aref c-set ?2) ; vowel upper
114 (setq consonant-alist
115 (cons (cons (string-to-char (car rule))
116 'lao-vowel-upper-input)
117 consonant-alist)))
118 ((aref c-set ?3) ; vowel lower
119 (setq consonant-alist
120 (cons (cons (string-to-char (car rule))
121 'lao-vowel-lower-input)
122 consonant-alist)
123 semivowel-lower-alist
124 (cons (cons (string-to-char (car rule))
125 'lao-vowel-lower-input)
126 semivowel-lower-alist)))
127 ((aref c-set ?4) ; tone
128 (setq consonant-alist
129 (cons (cons (string-to-char (car rule))
130 'lao-tone-input)
131 consonant-alist)
132 vowel-upper-alist
133 (cons (cons (string-to-char (car rule))
134 'lao-tone-input)
135 vowel-upper-alist)
136 vowel-lower-alist
137 (cons (cons (string-to-char (car rule))
138 'lao-tone-input)
139 vowel-lower-alist)))
140 ((aref c-set ?9) ; semivowel lower
141 (setq consonant-alist
142 (cons (cons (string-to-char (car rule))
143 'lao-semivowel-lower-input)
144 consonant-alist)
145 vowel-upper-alist
146 (cons (cons (string-to-char (car rule))
147 'lao-semivowel-lower-input)
148 vowel-upper-alist))))
149 (setq l (cdr l)))
150 (list 'progn
151 (cons 'quail-define-rules rules)
152 `(setq lao-consonant-alist ',consonant-alist
153 lao-vowel-upper-alist ',vowel-upper-alist
154 lao-vowel-lower-alist ',vowel-lower-alist
155 lao-semivowel-lower-alist ',semivowel-lower-alist))))
156
157 (lao-quail-define-rules
158 ("!" "1")
159 ("\"" "=")
160 ("#" "3")
161 ("$" "4")
162 ("&" "5")
163 ("%" "(1l(B")
164 ("'" ("(1'(B" . lao-consonant-input))
165 ("(" "7")
166 (")" "8")
167 ("*" "6")
168 ("+" "0(1mh1(B")
169 ("," ("(1A(B" . lao-consonant-input))
170 ("-" "9")
171 ("." "(1c(B")
172 ("/" ("(1=(B" . lao-consonant-input))
173 ("0" ("(1"(B" . lao-consonant-input))
174 ("1" ("(1B(B" . lao-consonant-input))
175 ("2" ("(1?(B" . lao-consonant-input))
176 ("3" "(1b(B")
177 ("4" ("(16(B" . lao-consonant-input))
178 ("5" "(1X(B")
179 ("6" "(1Y(B")
180 ("7" ("(1$(B" . lao-consonant-input))
181 ("8" ("(15(B" . lao-consonant-input))
182 ("9" ("(1((B" . lao-consonant-input))
183 (":" "%")
184 (";" ("(1G(B" . lao-consonant-input))
185 ("<" ("(1}(B" . lao-consonant-input))
186 ("=" "(1m(B")
187 (">" ">")
188 ("?" ")")
189 ("@" "2")
190 ("A" "0(1Qi1(B")
191 ("B" "0(1Vi1(B")
192 ("C" "(1O(B")
193 ("D" ".")
194 ("E" "0(1Si1(B")
195 ("F" ",")
196 ("G" ":")
197 ("H" "(1j(B")
198 ("I" ("(1N(B" . lao-consonant-input))
199 ("J" "(1k(B")
200 ("K" "!")
201 ("L" "?")
202 ("M" "(1f(B")
203 ("N" "0(1Wi1(B")
204 ("O" ("(1|(B" . lao-consonant-input))
205 ("P" "(1](B")
206 ("Q" "0(1[i1(B")
207 ("R" "_")
208 ("S" ";")
209 ("T" "+")
210 ("U" "0(1Ui1(B")
211 ("V" "x")
212 ("W" "0")
213 ("X" "(")
214 ("Y" "0(1Ti1(B")
215 ("Z" "\"")
216 ("[" ("(1:(B" . lao-consonant-input))
217 ("]" ("(1E(B" . lao-consonant-input))
218 ("^" "(1\(B")
219 ("_" ("(1*(B" . lao-consonant-input))
220 ("`" ("(1'(B" . lao-consonant-input))
221 ("a" "(1Q(B")
222 ("b" "(1V(B")
223 ("c" "(1a(B")
224 ("d" ("(1!(B" . lao-consonant-input))
225 ("e" "(1S(B")
226 ("f" ("(14(B" . lao-consonant-input))
227 ("g" "(1`(B")
228 ("h" "(1i(B")
229 ("i" ("(1C(B" . lao-consonant-input))
230 ("j" "(1h(B")
231 ("k" "(1R(B")
232 ("l" ("(1J(B" . lao-consonant-input))
233 ("m" ("(17(B" . lao-consonant-input))
234 ("n" "(1W(B")
235 ("o" ("(19(B" . lao-consonant-input))
236 ("p" ("(1-(B" . lao-consonant-input))
237 ("q" "(1[(B")
238 ("r" ("(1>(B" . lao-consonant-input))
239 ("s" ("(1K(B" . lao-consonant-input))
240 ("t" "(1P(B")
241 ("u" "(1U(B")
242 ("v" ("(1M(B" . lao-consonant-input))
243 ("w" "(1d(B")
244 ("x" ("(1;(B" . lao-consonant-input))
245 ("y" "(1T(B")
246 ("z" ("(1<(B" . lao-consonant-input))
247 ("{" "-")
248 ("|" ("0(1K\1(B" . lao-consonant-input))
249 ("}" "/")
250 ("~" "(1l(B")
251 ("\\0" "(1p(B")
252 ("\\1" "(1q(B")
253 ("\\2" "(1r(B")
254 ("\\3" "(1s(B")
255 ("\\4" "(1t(B")
256 ("\\5" "(1u(B")
257 ("\\6" "(1v(B")
258 ("\\7" "(1w(B")
259 ("\\8" "(1x(B")
260 ("\\9" "(1y(B")
261 )
262
263
264 ;;; quail/lao.el ends here