Commit | Line | Data |
---|---|---|
3978dec0 | 1 | ;;; indian.el --- Quail packages for inputting Indian |
c6974daa RS |
2 | |
3 | ;; Copyright (C) 2000, 2001 Free Software Foundation, Inc. | |
4 | ||
5 | ;; Author: KAWABATA, Taichi <kawabata@m17n.org> | |
6 | ||
7 | ;; Keywords: multilingual, input method, Indian, Devanagari | |
8 | ||
9 | ;; This file is part of GNU Emacs. | |
10 | ||
11 | ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 | ;; it under the terms of the GNU General Public License as published by | |
13 | ;; the Free Software Foundation; either version 2, or (at your option) | |
14 | ;; any later version. | |
15 | ||
16 | ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 | ;; GNU General Public License for more details. | |
20 | ||
21 | ;; You should have received a copy of the GNU General Public License | |
22 | ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
23 | ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 | ;; Boston, MA 02111-1307, USA. | |
25 | ||
26 | ;;; Commentary: | |
27 | ||
28 | ;; History: | |
29 | ||
96566974 DL |
30 | ;; 2000.12.12 |
31 | ;; Totally re-written from devanagari.el to handle multiple Indian Scripts. | |
c6974daa RS |
32 | |
33 | ;;; Code: | |
34 | ||
c6974daa RS |
35 | (require 'quail) |
36 | (require 'devan-util) | |
37 | (require 'ind-util) | |
38 | ||
39 | (defun quail-indian-preceding-char-position (position) | |
40 | "Return the position of preceding composite character." | |
41 | (let (prec-composed) | |
96566974 | 42 | (if (char-valid-p (char-before position)) ;; range o.k. |
c6974daa RS |
43 | (if (setq prec-composed (find-composition (1- position))) |
44 | (car prec-composed) | |
45 | (1- position)) | |
46 | nil))) | |
47 | ||
48 | (defvar quail-indian-update-preceding-char nil) | |
49 | (make-variable-frame-local 'quail-indian-update-preceding-char) | |
50 | ||
75a304b7 KH |
51 | ;; Input value :: |
52 | ;; CONTROL-FLAG is integer `n' | |
96566974 | 53 | ;; quail-current-key :: keyboard input. |
75a304b7 KH |
54 | ;; Only first `n' can be translated. |
55 | ;; quail-current-str :: corresonding string. | |
56 | ;; jobs :: (1) put last (len-n) char to unrread-command-event. | |
57 | ;; (2) put translated string to quail-current-str. | |
c6974daa | 58 | ;; |
75a304b7 | 59 | ;; CONTROL-FLAG is t (terminate) or nil (proceed the translation) |
c6974daa | 60 | ;; quail-current-key :: keyboard input. |
75a304b7 KH |
61 | ;; quail-current-str :: corresponding string. |
62 | ;; jobs :: (1) put modified translated string to quail-current-str. | |
63 | ;; | |
64 | ;; When non-nil value is returned from quail-translation-update-function, | |
65 | ;; the quail-current-str is split to characters and put into event queue, | |
66 | ;; with `compose-last-char' event with composition info at the end. | |
c6974daa RS |
67 | |
68 | (defun quail-indian-update-translation (control-flag) | |
c6974daa RS |
69 | ;; make quail-current-str string when possible. |
70 | (if (char-valid-p quail-current-str) | |
71 | (setq quail-current-str (char-to-string quail-current-str))) | |
75a304b7 KH |
72 | ;(message "\n input control-flag=%s, str=%s, key=%s q-ind-upd-prec-char=%s" |
73 | ; control-flag quail-current-str quail-current-key | |
74 | ; quail-indian-update-preceding-char) | |
c6974daa RS |
75 | ;; reset quail-indian-update-preceding-char if it's initial. |
76 | (if (= (overlay-start quail-overlay) (overlay-end quail-overlay)) | |
77 | (setq quail-indian-update-preceding-char nil)) | |
75a304b7 KH |
78 | ;; Check the preceding character of the quail region. If the |
79 | ;; preceding character can be composed with quail-current-str, then | |
80 | ;; grab that preceding character into the quail-current-str and | |
81 | ;; remove that char from the region. | |
c6974daa RS |
82 | (let* (prec-char-position composition-regexp |
83 | prec-char-str candidate-str match-pos match-end) | |
84 | (when (and quail-current-str | |
75a304b7 | 85 | (null quail-indian-update-preceding-char) |
c6974daa RS |
86 | (null input-method-use-echo-area) |
87 | (null input-method-exit-on-first-char) | |
96566974 | 88 | (setq prec-char-position |
c6974daa RS |
89 | (quail-indian-preceding-char-position |
90 | (overlay-start quail-overlay))) | |
91 | (setq composition-regexp | |
96566974 DL |
92 | (if prec-char-position |
93 | (caar (elt composition-function-table | |
c6974daa | 94 | (char-after prec-char-position))))) |
c6974daa RS |
95 | (setq prec-char-str |
96 | (buffer-substring prec-char-position | |
97 | (overlay-start quail-overlay)) | |
98 | candidate-str (concat prec-char-str quail-current-str) | |
99 | match-pos (string-match composition-regexp candidate-str) | |
100 | match-end (match-end 0)) | |
101 | (> match-end (length prec-char-str))) | |
102 | (setq quail-indian-update-preceding-char prec-char-str) | |
103 | (delete-region prec-char-position | |
104 | (overlay-start quail-overlay)))) | |
75a304b7 KH |
105 | (setq quail-current-str |
106 | (indian-compose-string | |
107 | (concat quail-indian-update-preceding-char | |
108 | quail-current-str))) | |
c6974daa | 109 | (if (numberp control-flag) |
75a304b7 | 110 | (setq unread-command-events |
c6974daa | 111 | (string-to-list |
75a304b7 KH |
112 | (substring quail-current-key control-flag)))) |
113 | (when control-flag | |
c6974daa | 114 | (setq quail-indian-update-preceding-char nil)) |
75a304b7 KH |
115 | ;(message "output control-flag=%s, str=%s, key=%s q-ind-upd-prec-char=%s" |
116 | ; control-flag quail-current-str quail-current-key | |
117 | ; quail-indian-update-preceding-char) | |
c6974daa RS |
118 | control-flag) |
119 | ||
120 | ;;; | |
121 | ;;; Input by transliteration | |
122 | ;;; | |
123 | ||
124 | (defun quail-define-indian-trans-package (hashtbls pkgname | |
125 | lang title doc) | |
126 | (funcall 'quail-define-package pkgname lang title t doc | |
127 | nil nil nil nil nil nil t nil | |
128 | 'quail-indian-update-translation) | |
96566974 | 129 | (maphash |
7f93e2ab DL |
130 | (lambda (key val) |
131 | (quail-defrule key (if (= (length val) 1) | |
132 | (string-to-char val) | |
133 | (vector val)))) | |
c6974daa RS |
134 | (cdr hashtbls))) |
135 | ||
dfafefa1 EZ |
136 | ;; This needs to be seen by quail-update-leim-list-file, but cannot be |
137 | ;; commented out because quail-update-leim-list-file ignores | |
138 | ;; commented-out lines. | |
139 | (if nil | |
140 | (quail-define-package "devanagari-itrans" "Devanagari" "DevIT" t "Devanagari ITRANS")) | |
c6974daa RS |
141 | (quail-define-indian-trans-package |
142 | indian-dev-itrans-v5-hash "devanagari-itrans" "Devanagari" "DevIT" | |
143 | "Devanagari transliteration by ITRANS method.") | |
144 | ||
dfafefa1 EZ |
145 | (if nil |
146 | (quail-define-package "devanagari-kyoto-harvard" "Devanagari" "DevKH" t "Devanagari Kyoto-Harvard")) | |
c6974daa RS |
147 | (quail-define-indian-trans-package |
148 | indian-dev-kyoto-harvard-hash | |
149 | "devanagari-kyoto-harvard" "Devanagari" "DevKH" | |
150 | "Devanagari transliteration by Kyoto-Harvard method.") | |
151 | ||
dfafefa1 EZ |
152 | (if nil |
153 | (quail-define-package "devanagari-aiba" "Devanagari" "DevAB" t "Devanagari Aiba")) | |
c6974daa RS |
154 | (quail-define-indian-trans-package |
155 | indian-dev-aiba-hash "devanagari-aiba" "Devanagari" "DevAB" | |
156 | "Devanagari transliteration by Aiba-method.") | |
157 | ||
32103956 KH |
158 | (if nil |
159 | (quail-define-package "punjabi-itrans" "Punjabi" "PnjIT" t "Punjabi ITRANS")) | |
160 | (quail-define-indian-trans-package | |
161 | indian-pnj-itrans-v5-hash "punjabi-itrans" "Punjabi" "PnjIT" | |
162 | "Punjabi transliteration by ITRANS method.") | |
163 | ||
164 | (if nil | |
165 | (quail-define-package "gujarati-itrans" "Gujarati" "GjrIT" t "Gujarati ITRANS")) | |
166 | (quail-define-indian-trans-package | |
167 | indian-gjr-itrans-v5-hash "gujarati-itrans" "Gujarati" "GjrIT" | |
168 | "Gujarati transliteration by ITRANS method.") | |
169 | ||
170 | (if nil | |
171 | (quail-define-package "oriya-itrans" "Oriya" "OriIT" t "Oriya ITRANS")) | |
172 | (quail-define-indian-trans-package | |
173 | indian-ori-itrans-v5-hash "oriya-itrans" "Oriya" "OriIT" | |
174 | "Oriya transliteration by ITRANS method.") | |
175 | ||
176 | (if nil | |
177 | (quail-define-package "bengali-itrans" "Bengali" "BngIT" t "Bengali ITRANS")) | |
178 | (quail-define-indian-trans-package | |
179 | indian-bng-itrans-v5-hash "bengali-itrans" "Bengali" "BngIT" | |
180 | "Bengali transliteration by ITRANS method.") | |
181 | ||
182 | (if nil | |
183 | (quail-define-package "assamese-itrans" "Assamese" "AsmIT" t "Assamese ITRANS")) | |
184 | (quail-define-indian-trans-package | |
185 | indian-asm-itrans-v5-hash "assamese-itrans" "Assamese" "AsmIT" | |
186 | "Assamese transliteration by ITRANS method.") | |
187 | ||
188 | (if nil | |
189 | (quail-define-package "telugu-itrans" "Telugu" "TlgIT" t "Telugu ITRANS")) | |
190 | (quail-define-indian-trans-package | |
191 | indian-tlg-itrans-v5-hash "telugu-itrans" "Telugu" "TlgIT" | |
192 | "Telugu transliteration by ITRANS method.") | |
193 | ||
194 | (if nil | |
195 | (quail-define-package "kannada-itrans" "Kannada" "KndIT" t "Kannada ITRANS")) | |
196 | (quail-define-indian-trans-package | |
197 | indian-knd-itrans-v5-hash "kannada-itrans" "Kannada" "KndIT" | |
198 | "Kannada transliteration by ITRANS method.") | |
199 | ||
200 | (if nil | |
201 | (quail-define-package "malayalam-itrans" "Malayalam" "MlmIT" t "Malayalam ITRANS")) | |
202 | (quail-define-indian-trans-package | |
203 | indian-mlm-itrans-v5-hash "malayalam-itrans" "Malayalam" "MlmIT" | |
204 | "Malayalam transliteration by ITRANS method.") | |
205 | ||
206 | (if nil | |
207 | (quail-define-package "tamil-itrans" "Tamil" "TmlIT" t "Tamil ITRANS")) | |
208 | (quail-define-indian-trans-package | |
209 | indian-tml-itrans-v5-hash "tamil-itrans" "Tamil" "TmlIT" | |
210 | "Tamil transliteration by ITRANS method.") | |
211 | ||
212 | ||
c6974daa RS |
213 | ;;; |
214 | ;;; Input by Inscript | |
215 | ;;; | |
216 | ||
96566974 | 217 | (defun quail-indian-flatten-list (lst) |
c6974daa RS |
218 | "Flatten the nested LIST so that there would be no innner list." |
219 | (if (listp lst) | |
96566974 | 220 | (apply 'append (mapcar 'quail-indian-flatten-list lst)) |
c6974daa RS |
221 | (list lst))) |
222 | ||
223 | (defun quail-define-inscript-package (char-table key-table pkgname lang title | |
224 | docstring) | |
96566974 DL |
225 | (setq char-table (quail-indian-flatten-list char-table)) |
226 | (setq key-table (quail-indian-flatten-list key-table)) | |
c6974daa RS |
227 | (funcall 'quail-define-package pkgname lang title nil docstring |
228 | nil nil nil nil nil nil nil nil | |
7f93e2ab DL |
229 | 'quail-indian-update-translation) |
230 | (dolist (key key-table) | |
231 | (let ((val (pop char-table))) | |
232 | (if (and key val) | |
233 | (quail-defrule | |
c6974daa | 234 | (if (char-valid-p key) (char-to-string key) key) |
7f93e2ab | 235 | (if (stringp val) (vector val) val)))))) |
c6974daa RS |
236 | |
237 | ;; | |
238 | ||
239 | (defvar inscript-dev-keytable | |
240 | '( | |
241 | (;; VOWELS (18) | |
242 | (?D nil) (?E ?e) (?F ?f) (?R ?r) (?G ?g) (?T ?t) | |
243 | (?+ ?=) ("F]" "f]") (?! ?@) (?Z ?z) (?S ?s) (?W ?w) | |
244 | (?| ?\\) (?~ ?`) (?A ?a) (?Q ?q) ("+]" "=]") ("R]" "r]")) | |
245 | (;; CONSONANTS (42) | |
246 | ?k ?K ?i ?I ?U ;; GRUTTALS | |
96566974 DL |
247 | ?\; ?: ?p ?P ?} ;; PALATALS |
248 | ?' ?\" ?\[ ?{ ?C ;; CEREBRALS | |
249 | ?l ?L ?o ?O ?v ?V ;; DENTALS | |
250 | ?h ?H ?y ?Y ?c ;; LABIALS | |
c6974daa | 251 | ?/ ?j ?J ?n ?N "N]" ?b ;; SEMIVOWELS |
96566974 DL |
252 | ?M ?< ?m ?u ;; SIBILANTS |
253 | "k]" "K]" "i]" "p]" "[]" "{]" "H]" "/]" ;; NUKTAS | |
c6974daa | 254 | ?% ?&) |
96566974 | 255 | (;; Misc Symbols (7) |
c6974daa RS |
256 | ?X ?x ?_ ">]" ?d "X]" ?>) |
257 | (;; Digits | |
258 | ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9) | |
259 | (;; Inscripts | |
260 | ?# ?$ ?^ ?* ?\]))) | |
261 | ||
dfafefa1 EZ |
262 | (if nil |
263 | (quail-define-package "devanagari-inscript" "Devanagari" "DevIS" t "Devanagari keyboard Inscript")) | |
96566974 | 264 | (quail-define-inscript-package |
c6974daa RS |
265 | indian-dev-base-table inscript-dev-keytable |
266 | "devanagari-inscript" "Devanagari" "DevIS" | |
267 | "Devanagari keyboard Inscript.") | |
268 | ||
32103956 KH |
269 | (if nil |
270 | (quail-define-package "punjabi-inscript" "Punjabi" "PnjIS" t "Punjabi keyboard Inscript")) | |
271 | (quail-define-inscript-package | |
272 | indian-pnj-base-table inscript-dev-keytable | |
273 | "punjabi-inscript" "Punjabi" "PnjIS" | |
274 | "Punjabi keyboard Inscript.") | |
275 | ||
276 | (if nil | |
277 | (quail-define-package "gujarati-inscript" "Gujarati" "GjrIS" t "Gujarati keyboard Inscript")) | |
278 | (quail-define-inscript-package | |
279 | indian-gjr-base-table inscript-dev-keytable | |
280 | "gujarati-inscript" "Gujarati" "GjrIS" | |
281 | "Gujarati keyboard Inscript.") | |
282 | ||
283 | (if nil | |
284 | (quail-define-package "oriya-inscript" "Oriya" "OriIS" t "Oriya keyboard Inscript")) | |
285 | (quail-define-inscript-package | |
286 | indian-ori-base-table inscript-dev-keytable | |
287 | "oriya-inscript" "Oriya" "OriIS" | |
288 | "Oriya keyboard Inscript.") | |
289 | ||
290 | (if nil | |
291 | (quail-define-package "bengali-inscript" "Bengali" "BngIS" t "Bengali keyboard Inscript")) | |
292 | (quail-define-inscript-package | |
293 | indian-bng-base-table inscript-dev-keytable | |
294 | "bengali-inscript" "Bengali" "BngIS" | |
295 | "Bengali keyboard Inscript.") | |
296 | ||
297 | (if nil | |
298 | (quail-define-package "assamese-inscript" "Assamese" "AsmIS" t "Assamese keyboard Inscript")) | |
299 | (quail-define-inscript-package | |
300 | indian-asm-base-table inscript-dev-keytable | |
301 | "assamese-inscript" "Assamese" "AsmIS" | |
302 | "Assamese keyboard Inscript.") | |
303 | ||
304 | (if nil | |
305 | (quail-define-package "telugu-inscript" "Telugu" "TlgIS" t "Telugu keyboard Inscript")) | |
306 | (quail-define-inscript-package | |
307 | indian-dev-base-table inscript-dev-keytable | |
308 | "telugu-inscript" "Telugu" "TlgIS" | |
309 | "Telugu keyboard Inscript.") | |
310 | ||
311 | (if nil | |
312 | (quail-define-package "kannada-inscript" "Kannada" "KndIS" t "Kannada keyboard Inscript")) | |
313 | (quail-define-inscript-package | |
314 | indian-knd-base-table inscript-dev-keytable | |
315 | "kannada-inscript" "Kannada" "KndIS" | |
316 | "Kannada keyboard Inscript.") | |
317 | ||
318 | (if nil | |
319 | (quail-define-package "malayalam-inscript" "Malayalam" "MlmIS" t "Malayalam keyboard Inscript")) | |
320 | (quail-define-inscript-package | |
321 | indian-mlm-base-table inscript-dev-keytable | |
322 | "malayalam-inscript" "Malayalam" "MlmIS" | |
323 | "Malayalam keyboard Inscript.") | |
324 | ||
325 | (if nil | |
326 | (quail-define-package "tamil-inscript" "Tamil" "TmlIS" t "Tamil keyboard Inscript")) | |
327 | (quail-define-inscript-package | |
328 | indian-tml-base-table inscript-dev-keytable | |
329 | "tamil-inscript" "Tamil" "TmlIS" | |
330 | "Tamil keyboard Inscript.") | |
331 | ||
ab5796a9 | 332 | ;;; arch-tag: 9e5a621e-f7d5-4fce-9543-0a51b407c940 |
3978dec0 | 333 | ;;; indian.el ends here |