1 ;;; indian.el --- Quail packages for inputting Indian
3 ;; Copyright (C) 2000-2011 Free Software Foundation, Inc.
5 ;; Author: KAWABATA, Taichi <kawabata@m17n.org>
7 ;; Keywords: multilingual, input method, Indian, Devanagari
9 ;; This file is part of GNU Emacs.
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.
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.
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/>.
29 ;; Totally re-written from devanagari.el to handle multiple Indian Scripts.
37 ;;; Input by transliteration
40 (defun quail-define-indian-trans-package (hashtbls pkgname
42 (funcall 'quail-define-package pkgname lang title t doc
43 nil nil nil nil nil nil t nil)
46 (quail-defrule key (if (= (length val) 1)
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.
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.")
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.")
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.")
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.")
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.")
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.")
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.")
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.")
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.")
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.")
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.")
121 (defvar quail-tamil-itrans-syllable-table
159 ("க்ஷ" "x" ) ; U+0B95
170 (insert (propertize "\t" 'display (list 'space :align-to clm))
172 (setq clm (+ clm 6)))
176 (insert (propertize "\t" 'display (list 'space :align-to clm))
178 (setq clm (+ clm 6)))
179 (dolist (c consonants)
183 (insert (car c) virama
184 (propertize "\t" 'display '(space :align-to 4))
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))
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))))
206 (defvar quail-tamil-itrans-numerics-and-symbols-table
207 (let ((numerics '((?௰ "பத்து") (?௱ "நூறு") (?௲ "ஆயிரம்")))
208 (symbols '((?௳ "நாள்") (?௴ "மாதம்") (?௵ "வருடம்")
209 (?௶ "பற்று") (?௷ "வரவு") (?௸ "மேற்படி")
210 (?௹ "ரூபாய்") (?௺ "எண்")))
213 (insert "\n" (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
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")
221 (dolist (elm numerics)
223 (insert (propertize "\t" 'display (list 'space :align-to clm))))
225 (setq clm (+ clm 5)))
226 (insert (propertize "\t" 'display '(space :align-to 18)) "|")
228 (dolist (elm symbols)
230 (insert (propertize "\t" 'display (list 'space :align-to clm))))
232 (setq clm (+ clm 8)))
234 (insert (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
238 (defvar quail-tamil-itrans-various-signs-and-digits-table
239 (let ((various '((?ஃ . "H") ("ஸ்ரீ" . "srii") (?ௐ)))
240 (digits "௦௧௨௩௪௫௬௭௮௯")
243 (insert "\n" (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
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")
249 (insert "\n" (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
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)) "|")
259 (insert (propertize "\t" 'display (list 'space :align-to clm))
261 (setq clm (+ clm width)))
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)) "|")
271 (insert (propertize "\t" 'display (list 'space :align-to clm))
273 (setq clm (+ clm width)))
274 (insert "\n" (make-string 18 ?-) "+" (make-string 60 ?-) "\n")
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.
283 You can input characters using the following mapping tables.
284 Example: To enter வணக்கம், type vaNakkam.
286 ### Basic syllables (consonants + vowels) ###
287 \\<quail-tamil-itrans-syllable-table>
289 ### Miscellaneous (various signs + digits) ###
290 \\<quail-tamil-itrans-various-signs-and-digits-table>
292 ### Others (numerics + symbols) ###
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>
298 Full key sequences are listed below:")
301 ;;; Input by Inscript
304 (defun quail-define-inscript-package (char-tables key-tables pkgname lang
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)
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))
324 (if (characterp key) (char-to-string key) key)
325 (if (stringp char) (vector char) char))))))))
329 (defvar inscript-dev-keytable
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]"))
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
346 ?X ?x ?_ ">]" ?d "X]" ?>)
348 ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)
352 (defvar inscript-mlm-keytable
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]"))
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
369 ?X ?x ?_ ">]" ?d "X]" ?>)
371 ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)
375 (defvar inscript-tml-keytable
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)
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
392 ?X ?x ?_ ">]" ?d "X]" ?>)
394 ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)
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.")
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.")
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.")
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.")
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.")
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.")
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.")
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.")
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.")
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.")
468 ;;; indian.el ends here