]> code.delx.au - gnu-emacs/blob - leim/quail/indian.el
8bdac3f584246f6929e8c5ade8d1912d758f5f66
[gnu-emacs] / leim / quail / indian.el
1 ;;; indian.el --- Quail packages for inputting Indian
2
3 ;; Copyright (C) 2000-2011 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 3 of the License, or
14 ;; (at your option) 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. If not, see <http://www.gnu.org/licenses/>.
23
24 ;;; Commentary:
25
26 ;; History:
27
28 ;; 2000.12.12
29 ;; Totally re-written from devanagari.el to handle multiple Indian Scripts.
30
31 ;;; Code:
32
33 (require 'quail)
34 (require 'ind-util)
35
36 ;;;
37 ;;; Input by transliteration
38 ;;;
39
40 (defun quail-define-indian-trans-package (hashtbls pkgname
41 lang title doc)
42 (funcall 'quail-define-package pkgname lang title t doc
43 nil nil nil nil nil nil t nil)
44 (maphash
45 (lambda (key val)
46 (quail-defrule key (if (= (length val) 1)
47 (string-to-char val)
48 (vector val))))
49 (cdr hashtbls)))
50
51 ;; This needs to be seen by quail-update-leim-list-file, but cannot be
52 ;; commented out because quail-update-leim-list-file ignores
53 ;; commented-out lines.
54 (if nil
55 (quail-define-package "devanagari-itrans" "Devanagari" "DevIT" t "Devanagari ITRANS"))
56 (quail-define-indian-trans-package
57 indian-dev-itrans-v5-hash "devanagari-itrans" "Devanagari" "DevIT"
58 "Devanagari transliteration by ITRANS method.")
59
60 (if nil
61 (quail-define-package "devanagari-kyoto-harvard" "Devanagari" "DevKH" t "Devanagari Kyoto-Harvard"))
62 (quail-define-indian-trans-package
63 indian-dev-kyoto-harvard-hash
64 "devanagari-kyoto-harvard" "Devanagari" "DevKH"
65 "Devanagari transliteration by Kyoto-Harvard method.")
66
67 (if nil
68 (quail-define-package "devanagari-aiba" "Devanagari" "DevAB" t "Devanagari Aiba"))
69 (quail-define-indian-trans-package
70 indian-dev-aiba-hash "devanagari-aiba" "Devanagari" "DevAB"
71 "Devanagari transliteration by Aiba-method.")
72
73 (if nil
74 (quail-define-package "punjabi-itrans" "Punjabi" "PnjIT" t "Punjabi ITRANS"))
75 (quail-define-indian-trans-package
76 indian-pnj-itrans-v5-hash "punjabi-itrans" "Punjabi" "PnjIT"
77 "Punjabi transliteration by ITRANS method.")
78
79 (if nil
80 (quail-define-package "gujarati-itrans" "Gujarati" "GjrIT" t "Gujarati ITRANS"))
81 (quail-define-indian-trans-package
82 indian-gjr-itrans-v5-hash "gujarati-itrans" "Gujarati" "GjrIT"
83 "Gujarati transliteration by ITRANS method.")
84
85 (if nil
86 (quail-define-package "oriya-itrans" "Oriya" "OriIT" t "Oriya ITRANS"))
87 (quail-define-indian-trans-package
88 indian-ori-itrans-v5-hash "oriya-itrans" "Oriya" "OriIT"
89 "Oriya transliteration by ITRANS method.")
90
91 (if nil
92 (quail-define-package "bengali-itrans" "Bengali" "BngIT" t "Bengali ITRANS"))
93 (quail-define-indian-trans-package
94 indian-bng-itrans-v5-hash "bengali-itrans" "Bengali" "BngIT"
95 "Bengali transliteration by ITRANS method.")
96
97 (if nil
98 (quail-define-package "assamese-itrans" "Assamese" "AsmIT" t "Assamese ITRANS"))
99 (quail-define-indian-trans-package
100 indian-asm-itrans-v5-hash "assamese-itrans" "Assamese" "AsmIT"
101 "Assamese transliteration by ITRANS method.")
102
103 (if nil
104 (quail-define-package "telugu-itrans" "Telugu" "TlgIT" t "Telugu ITRANS"))
105 (quail-define-indian-trans-package
106 indian-tlg-itrans-v5-hash "telugu-itrans" "Telugu" "TlgIT"
107 "Telugu transliteration by ITRANS method.")
108
109 (if nil
110 (quail-define-package "kannada-itrans" "Kannada" "KndIT" t "Kannada ITRANS"))
111 (quail-define-indian-trans-package
112 indian-knd-itrans-v5-hash "kannada-itrans" "Kannada" "KndIT"
113 "Kannada transliteration by ITRANS method.")
114
115 (if nil
116 (quail-define-package "malayalam-itrans" "Malayalam" "MlmIT" t "Malayalam ITRANS"))
117 (quail-define-indian-trans-package
118 indian-mlm-itrans-v5-hash "malayalam-itrans" "Malayalam" "MlmIT"
119 "Malayalam transliteration by ITRANS method.")
120
121 (defvar quail-tamil-itrans-syllable-table
122 (let ((vowels
123 '(("அ" nil "a")
124 ("ஆ" "ா" "A")
125 ("இ" "ி" "i")
126 ("ஈ" "ீ" "I")
127 ("உ" "ு" "u")
128 ("ஊ" "ூ" "U")
129 ("எ" "ெ" "e")
130 ("ஏ" "ே" "E")
131 ("ஐ" "ை" "ai")
132 ("ஒ" "ொ" "o")
133 ("ஓ" "ோ" "O")
134 ("ஔ" "ௌ" "au")))
135 (consonants
136 '(("க" "k") ; U+0B95
137 ("ங" "N^") ; U+0B99
138 ("ச" "ch") ; U+0B9A
139 ("ஞ" "JN") ; U+0B9E
140 ("ட" "T") ; U+0B9F
141 ("ண" "N") ; U+0BA3
142 ("த" "t") ; U+0BA4
143 ("ந" "n") ; U+0BA8
144 ("ப" "p") ; U+0BAA
145 ("ம" "m") ; U+0BAE
146 ("ய" "y") ; U+0BAF
147 ("ர" "r") ; U+0BB0
148 ("ல" "l") ; U+0BB2
149 ("வ" "v") ; U+0BB5
150 ("ழ" "z") ; U+0BB4
151 ("ள" "L") ; U+0BB3
152 ("ற" "rh") ; U+0BB1
153 ("ன" "nh") ; U+0BA9
154 ("ஜ" "j") ; U+0B9C
155 ("ஶ" nil) ; U+0BB6
156 ("ஷ" "Sh") ; U+0BB7
157 ("ஸ" "s") ; U+0BB8
158 ("ஹ" "h") ; U+0BB9
159 ("க்ஷ" "x" ) ; U+0B95
160 ))
161 (virama #x0BCD)
162 clm)
163 (with-temp-buffer
164 (insert "\n")
165 (insert " +")
166 (insert-char ?- 74)
167 (insert "\n |")
168 (setq clm 6)
169 (dolist (v vowels)
170 (insert (propertize "\t" 'display (list 'space :align-to clm))
171 (car v))
172 (setq clm (+ clm 6)))
173 (insert "\n |")
174 (setq clm 6)
175 (dolist (v vowels)
176 (insert (propertize "\t" 'display (list 'space :align-to clm))
177 (nth 2 v))
178 (setq clm (+ clm 6)))
179 (dolist (c consonants)
180 (insert "\n----+")
181 (insert-char ?- 74)
182 (insert "\n")
183 (insert (car c) virama
184 (propertize "\t" 'display '(space :align-to 4))
185 "|")
186 (setq clm 6)
187 (dolist (v vowels)
188 (insert (propertize "\t" 'display (list 'space :align-to clm))
189 (car c) (or (nth 1 v) ""))
190 (setq clm (+ clm 6)))
191 (insert "\n" (or (nth 1 c) "")
192 (propertize "\t" 'display '(space :align-to 4))
193 "|")
194 (setq clm 6)
195
196 (dolist (v vowels)
197 (apply 'insert (propertize "\t" 'display (list 'space :align-to clm))
198 (if (nth 1 c) (list (nth 1 c) (nth 2 v)) (list "")))
199 (setq clm (+ clm 6))))
200 (insert "\n")
201 (insert "----+")
202 (insert-char ?- 74)
203 (insert "\n")
204 (buffer-string))))
205
206 (defvar quail-tamil-itrans-numerics-and-symbols-table
207 (let ((numerics '((?௰ "பத்து") (?௱ "நூறு") (?௲ "ஆயிரம்")))
208 (symbols '((?௳ "நாள்") (?௴ "மாதம்") (?௵ "வருடம்")
209 (?௶ "பற்று") (?௷ "வரவு") (?௸ "மேற்படி")
210 (?௹ "ரூபாய்") (?௺ "எண்")))
211 clm)
212 (with-temp-buffer
213 (insert "\n" (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
214 (insert
215 (propertize "\t" 'display '(space :align-to 5)) "numerics"
216 (propertize "\t" 'display '(space :align-to 18)) "|"
217 (propertize "\t" 'display '(space :align-to 45)) "symbols")
218 (insert "\n" (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
219 (dotimes (i 2)
220 (setq clm 0)
221 (dolist (elm numerics)
222 (if (> clm 0)
223 (insert (propertize "\t" 'display (list 'space :align-to clm))))
224 (insert (nth i elm))
225 (setq clm (+ clm 5)))
226 (insert (propertize "\t" 'display '(space :align-to 18)) "|")
227 (setq clm 19)
228 (dolist (elm symbols)
229 (if (> clm 19)
230 (insert (propertize "\t" 'display (list 'space :align-to clm))))
231 (insert (nth i elm))
232 (setq clm (+ clm 8)))
233 (insert "\n"))
234 (insert (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
235 (insert "\n")
236 (buffer-string))))
237
238 (defvar quail-tamil-itrans-various-signs-and-digits-table
239 (let ((various '((?ஃ . "H") ("ஸ்ரீ" . "srii") (?ௐ)))
240 (digits "௦௧௨௩௪௫௬௭௮௯")
241 (width 6) clm)
242 (with-temp-buffer
243 (insert "\n" (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
244 (insert
245 (propertize "\t" 'display '(space :align-to 5)) "various"
246 (propertize "\t" 'display '(space :align-to 18)) "|"
247 (propertize "\t" 'display '(space :align-to 45)) "digits")
248
249 (insert "\n" (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
250 (setq clm 0 )
251
252 (dotimes (i (length various))
253 (insert (propertize "\t" 'display (list 'space :align-to clm))
254 (car (nth i various)))
255 (setq clm (+ clm width)))
256 (insert (propertize "\t" 'display '(space :align-to 18)) "|")
257 (setq clm 20)
258 (dotimes (i 10)
259 (insert (propertize "\t" 'display (list 'space :align-to clm))
260 (aref digits i))
261 (setq clm (+ clm width)))
262 (insert "\n")
263 (setq clm 0)
264 (dotimes (i (length various))
265 (insert (propertize "\t" 'display (list 'space :align-to clm))
266 (or (cdr (nth i various)) ""))
267 (setq clm (+ clm width)))
268 (insert (propertize "\t" 'display '(space :align-to 18)) "|")
269 (setq clm 20)
270 (dotimes (i 10)
271 (insert (propertize "\t" 'display (list 'space :align-to clm))
272 (format "%d" i))
273 (setq clm (+ clm width)))
274 (insert "\n" (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
275 (buffer-string))))
276
277 (if nil
278 (quail-define-package "tamil-itrans" "Tamil" "TmlIT" t "Tamil ITRANS"))
279 (quail-define-indian-trans-package
280 indian-tml-itrans-v5-hash "tamil-itrans" "Tamil" "TmlIT"
281 "Tamil transliteration by ITRANS method.
282
283 You can input characters using the following mapping tables.
284 Example: To enter வணக்கம், type vaNakkam.
285
286 ### Basic syllables (consonants + vowels) ###
287 \\<quail-tamil-itrans-syllable-table>
288
289 ### Miscellaneous (various signs + digits) ###
290 \\<quail-tamil-itrans-various-signs-and-digits-table>
291
292 ### Others (numerics + symbols) ###
293
294 Characters below have no ITRANS method associated with them.
295 Their descriptions are included for easy reference.
296 \\<quail-tamil-itrans-numerics-and-symbols-table>
297
298 Full key sequences are listed below:")
299
300 ;;;
301 ;;; Input by Inscript
302 ;;;
303
304 (defun quail-define-inscript-package (char-tables key-tables pkgname lang
305 title docstring)
306 (funcall 'quail-define-package pkgname lang title nil docstring
307 nil nil nil nil nil nil nil nil)
308 (let (char-table key-table char key)
309 (while (and char-tables key-tables)
310 (setq char-table (car char-tables)
311 char-tables (cdr char-tables)
312 key-table (car key-tables)
313 key-tables (cdr key-tables))
314 (while (and char-table key-table)
315 (setq char (car char-table)
316 char-table (cdr char-table)
317 key (car key-table)
318 key-table (cdr key-table))
319 (if (and (consp char) (consp key))
320 (setq char-table (append char char-table)
321 key-table (append key key-table))
322 (if (and key char)
323 (quail-defrule
324 (if (characterp key) (char-to-string key) key)
325 (if (stringp char) (vector char) char))))))))
326
327 ;;
328
329 (defvar inscript-dev-keytable
330 '(
331 (;; VOWELS (18)
332 (?D nil) (?E ?e) (?F ?f) (?R ?r) (?G ?g) (?T ?t)
333 (?+ ?=) ("F]" "f]") (?! ?@) (?Z ?z) (?S ?s) (?W ?w)
334 (?| ?\\) (?~ ?`) (?A ?a) (?Q ?q) ("+]" "=]") ("R]" "r]"))
335 (;; CONSONANTS (42)
336 ?k ?K ?i ?I ?U ;; GRUTTALS
337 ?\; ?: ?p ?P ?} ;; PALATALS
338 ?' ?\" ?\[ ?{ ?C ;; CEREBRALS
339 ?l ?L ?o ?O ?v ?V ;; DENTALS
340 ?h ?H ?y ?Y ?c ;; LABIALS
341 ?/ ?j ?J ?n ?N "N]" ?b ;; SEMIVOWELS
342 ?M ?< ?m ?u ;; SIBILANTS
343 "k]" "K]" "i]" "p]" "[]" "{]" "H]" "/]" ;; NUKTAS
344 ?% ?&)
345 (;; Misc Symbols (7)
346 ?X ?x ?_ ">]" ?d "X]" ?>)
347 (;; Digits
348 ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)
349 (;; Inscripts
350 ?# ?$ ?^ ?* ?\])))
351
352 (defvar inscript-mlm-keytable
353 '(
354 (;; VOWELS (18)
355 (?D nil) (?E ?e) (?F ?f) (?R ?r) (?G ?g) (?T ?t)
356 (?+ ?=) ("F]" "f]") (?! ?@) (?S ?s) (?Z ?z) (?W ?w)
357 (?| ?\\) (?~ ?`) (?A ?a) (?Q ?q) ("+]" "=]") ("R]" "r]"))
358 (;; CONSONANTS (42)
359 ?k ?K ?i ?I ?U ;; GRUTTALS
360 ?\; ?: ?p ?P ?} ;; PALATALS
361 ?' ?\" ?\[ ?{ ?C ;; CEREBRALS
362 ?l ?L ?o ?O ?v ?V ;; DENTALS
363 ?h ?H ?y ?Y ?c ;; LABIALS
364 ?/ ?j ?J ?n ?N "N]" ?b ;; SEMIVOWELS
365 ?M ?< ?m ?u ;; SIBILANTS
366 "k]" "K]" "i]" "p]" "[]" "{]" "H]" "/]" ;; NUKTAS
367 ?% ?&)
368 (;; Misc Symbols (7)
369 ?X ?x ?_ ">]" ?d "X]" ?>)
370 (;; Digits
371 ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)
372 (;; Inscripts
373 ?# ?$ ?^ ?* ?\])))
374
375 (defvar inscript-tml-keytable
376 '(
377 (;; VOWELS (18)
378 (?D nil) (?E ?e) (?F ?f) (?R ?r) (?G ?g) (?T ?t)
379 nil nil nil (?S ?s) (?Z ?z) (?W ?w)
380 nil (?A ?a) (?~ ?`) (?Q ?q) nil nil)
381 (;; CONSONANTS (42)
382 ?k ?K ?i ?I ?U ;; GRUTTALS
383 ?\; ?: ?p ?P ?} ;; PALATALS
384 ?' ?\" ?\[ ?{ ?C ;; CEREBRALS
385 ?l ?L ?o ?O ?v ?V ;; DENTALS
386 ?h ?H ?y ?Y ?c ;; LABIALS
387 ?/ ?j ?J ?n ?N "N]" ?b ;; SEMIVOWELS
388 ?M ?< ?m ?u ;; SIBILANTS
389 "k]" "K]" "i]" "p]" "[]" "{]" "H]" "/]" ;; NUKTAS
390 ?% ?&)
391 (;; Misc Symbols (7)
392 ?X ?x ?_ ">]" ?d "X]" ?>)
393 (;; Digits
394 ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)
395 (;; Inscripts
396 ?# ?$ ?^ ?* ?\])))
397
398 (if nil
399 (quail-define-package "devanagari-inscript" "Devanagari" "DevIS" t "Devanagari keyboard Inscript"))
400 (quail-define-inscript-package
401 indian-dev-base-table inscript-dev-keytable
402 "devanagari-inscript" "Devanagari" "DevIS"
403 "Devanagari keyboard Inscript.")
404
405 (if nil
406 (quail-define-package "punjabi-inscript" "Punjabi" "PnjIS" t "Punjabi keyboard Inscript"))
407 (quail-define-inscript-package
408 indian-pnj-base-table inscript-dev-keytable
409 "punjabi-inscript" "Punjabi" "PnjIS"
410 "Punjabi keyboard Inscript.")
411
412 (if nil
413 (quail-define-package "gujarati-inscript" "Gujarati" "GjrIS" t "Gujarati keyboard Inscript"))
414 (quail-define-inscript-package
415 indian-gjr-base-table inscript-dev-keytable
416 "gujarati-inscript" "Gujarati" "GjrIS"
417 "Gujarati keyboard Inscript.")
418
419 (if nil
420 (quail-define-package "oriya-inscript" "Oriya" "OriIS" t "Oriya keyboard Inscript"))
421 (quail-define-inscript-package
422 indian-ori-base-table inscript-dev-keytable
423 "oriya-inscript" "Oriya" "OriIS"
424 "Oriya keyboard Inscript.")
425
426 (if nil
427 (quail-define-package "bengali-inscript" "Bengali" "BngIS" t "Bengali keyboard Inscript"))
428 (quail-define-inscript-package
429 indian-bng-base-table inscript-dev-keytable
430 "bengali-inscript" "Bengali" "BngIS"
431 "Bengali keyboard Inscript.")
432
433 (if nil
434 (quail-define-package "assamese-inscript" "Assamese" "AsmIS" t "Assamese keyboard Inscript"))
435 (quail-define-inscript-package
436 indian-asm-base-table inscript-dev-keytable
437 "assamese-inscript" "Assamese" "AsmIS"
438 "Assamese keyboard Inscript.")
439
440 (if nil
441 (quail-define-package "telugu-inscript" "Telugu" "TlgIS" t "Telugu keyboard Inscript"))
442 (quail-define-inscript-package
443 indian-dev-base-table inscript-dev-keytable
444 "telugu-inscript" "Telugu" "TlgIS"
445 "Telugu keyboard Inscript.")
446
447 (if nil
448 (quail-define-package "kannada-inscript" "Kannada" "KndIS" t "Kannada keyboard Inscript"))
449 (quail-define-inscript-package
450 indian-knd-base-table inscript-dev-keytable
451 "kannada-inscript" "Kannada" "KndIS"
452 "Kannada keyboard Inscript.")
453
454 (if nil
455 (quail-define-package "malayalam-inscript" "Malayalam" "MlmIS" t "Malayalam keyboard Inscript"))
456 (quail-define-inscript-package
457 indian-mlm-base-table inscript-mlm-keytable
458 "malayalam-inscript" "Malayalam" "MlmIS"
459 "Malayalam keyboard Inscript.")
460
461 (if nil
462 (quail-define-package "tamil-inscript" "Tamil" "TmlIS" t "Tamil keyboard Inscript"))
463 (quail-define-inscript-package
464 indian-tml-base-table inscript-tml-keytable
465 "tamil-inscript" "Tamil" "TmlIS"
466 "Tamil keyboard Inscript.")
467
468 ;;; indian.el ends here