indian.el 16 KB

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