]> code.delx.au - gnu-emacs/blob - leim/quail/devanagari.el
Initial revision
[gnu-emacs] / leim / quail / devanagari.el
1 ;; quail/devanagari.el -- Quail packages for inputting Devanagari
2
3 ;; Copyright (C) 1997 Free Software Foundation, Inc.
4
5 ;; Author: KAWABATA, Taichi <kawabata@is.s.u-tokyo.ac.jp>
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 ;; 1996.10.10 written by KAWABATA, Taichi <kawabata@is.s.u-tokyo.ac.jp>
30 ;; 1997.03.21 fixed by KAWABATA, Taichi
31
32 ;; I'm not sure if this keyboard layout is REALLY an ISCII keyboard layout.
33 ;; Please let me know if it is not.
34
35 ;;; Code:
36
37 (require 'quail)
38 (require 'devan-util)
39
40 ;; This function does nothing for now. For future use.
41 (defun quail-devanagari-update-translation (control-flag)
42 (cond ((eq control-flag t) ; terminate translation with the whole key.
43 (insert quail-current-str)
44 (quail-terminate-translation))
45 ((null control-flag) ; proceed translation with more keys.
46 (insert (or quail-current-str quail-current-key)))
47 (t ; control-flag is the number of keys to be translated.
48 (insert (aref quail-current-key 0))
49 (setq unread-command-events
50 (list (aref quail-current-key control-flag))))))
51
52 (defun quail-devanagari-compose-characters ()
53 (interactive)
54 (if (quail-point-in-conversion-region)
55 (let* ((from (overlay-start quail-conv-overlay))
56 (to (overlay-end quail-conv-overlay))
57 (dstr (buffer-substring from to)))
58 (delete-overlay quail-overlay)
59 (delete-overlay quail-conv-overlay)
60 (save-restriction
61 (narrow-to-region from to)
62 (goto-char (point-min))
63 (delete-region (point-min) (point-max))
64 (insert (devanagari-compose-string dstr 'sanskrit))
65 (goto-char (point-max)))
66 (move-overlay quail-conv-overlay from (point))
67 (setq unread-command-events (list last-command-event))
68 (throw 'exit nil))
69 (setq unread-command-events (list last-command-event))
70 (throw 'exit nil)))
71
72 (quail-define-package
73 "devanagari-keyboard-a" "Devanagari" "DevK" t
74 "Devanagari input method with ISCII format
75
76 `\e$(5!\\e(B !\e$(5!.\e(B @\e$(5!c\e(B #x $x %x ^x &\e$(5")\e(B *\e$(5"(\e(B ( ) _\e$(5!#\e(B +\e$(5!*\e(B
77 ~\e$(5!/\e(B 1\e$(5!r\e(B 2\e$(5!s\e(B 3\e$(5!t\e(B 4\e$(5!u\e(B 5\e$(5!v\e(B 6\e$(5!w\e(B 7\e$(5!x\e(B 8\e$(5!y\e(B 9\e$(5!z\e(B 0\e$(5!q\e(B - =\e$(5!_\e(B
78
79 Q\e$(5!f\e(B W\e$(5!-\e(B E\e$(5!%\e(B R\e$(5!'\e(B T\e$(5!)\e(B Y\e$(5!K\e(B U\e$(5!7\e(B I\e$(5!E\e(B O\e$(5!C\e(B P\e$(5!;\e(B {\e$(5!@\e(B }\e$(5!<\e(B |\e$(5!2\e(B
80 q\e$(5!f\e(B w\e$(5!b\e(B e\e$(5!Z\e(B r\e$(5!\\e(B t\e$(5!^\e(B y\e$(5!J\e(B u\e$(5!X\e(B i\e$(5!5\e(B o\e$(5!D\e(B p\e$(5!:\e(B [\e$(5!?\e(B ]\e$(5!i\e(B \\\e$(5!g\e(B
81
82 A\e$(5!0\e(B S\e$(5!,\e(B D\e$(5!$\e(B F\e$(5!&\e(B G\e$(5!(\e(B H\e$(5!I\e(B J\e$(5!P\e(B K\e$(5!4\e(B l\e$(5!C\e(B :\e$(5!8\e(B \"\e$(5!>\e(B
83 a\e$(5!e\e(B s\e$(5!a\e(B d\e$(5!h\e(B f\e$(5![\e(B g\e$(5!]\e(B h\e$(5!H\e(B j\e$(5!O\e(B k\e$(5!3\e(B l\e$(5!B\e(B ;\e$(5!9\e(B '\e$(5!=\e(B
84
85 Z\e$(5!+\e(B X\e$(5!!\e(B C\e$(5!A\e(B V\e$(5!G\e(B B\e$(5!S\e(B N\e$(5!R\e(B M\e$(5!U\e(B <\e$(5!V\e(B >\e$(5!j\e(B ?\e$(5!N\e(B
86 z\e$(5!`\e(B x\e$(5!"\e(B c\e$(5!L\e(B v\e$(5!F\e(B b\e$(5!T\e(B n\e$(5!Q\e(B m\e$(5!W\e(B , . /\e$(5!M\e(B
87 "
88 nil t t nil nil nil nil nil
89 ;;'quail-devanagari-update-translation
90 nil
91 '((" " . quail-devanagari-compose-characters)
92 ("-" . quail-devanagari-compose-characters)
93 ("," . quail-devanagari-compose-characters)
94 ("\C-m" . quail-devanagari-compose-characters)
95 ([return] . quail-devanagari-compose-characters))
96 )
97
98 ;; ..... (not prepared yet)
99 ;; I forgot where I got this keymap from.
100 ;; Please let me know if you know what this keymap is.
101
102 (quail-define-rules
103 ("`" ?\e$(5!\\e(B)
104 ("~" ?\e$(5!/\e(B)
105 ("1" ?\e$(5!r\e(B)
106 ("!" ?\e$(5!.\e(B)
107 ("2" ?\e$(5!s\e(B)
108 ("@" ?\e$(5!c\e(B)
109 ("3" ?\e$(5!t\e(B)
110 ("#" ?# ) ; following "r" in keymap...
111 ("4" ?\e$(5!u\e(B)
112 ("$" ?$ ) ; preceding "r" in keymap...
113 ("5" ?\e$(5!v\e(B)
114 ("%" ?x ) ; ??
115 ("6" ?\e$(5!w\e(B)
116 ("^" ?x ) ; %tra
117 ("7" ?\e$(5!x\e(B)
118 ("&" ?\e$(5")\e(B) ; % special
119 ("8" ?\e$(5!y\e(B)
120 ("*" ?\e$(5"(\e(B) ; % special
121 ("9" ?\e$(5!z\e(B)
122 ("(" ?\()
123 ("0" ?\e$(5!q\e(B)
124 (")" ?\))
125 ("-" ?-)
126 ("_" ?\e$(5!#\e(B)
127 ("=" ?\e$(5!_\e(B)
128 ("+" ?\e$(5!*\e(B)
129 ("q" ?\e$(5!f\e(B)
130 ("Q" ?\e$(5!1\e(B)
131 ("w" ?\e$(5!b\e(B)
132 ("W" ?\e$(5!-\e(B)
133 ("e" ?\e$(5!Z\e(B)
134 ("E" ?\e$(5!%\e(B)
135 ("r" ?\e$(5!\\e(B)
136 ("R" ?\e$(5!'\e(B)
137 ("t" ?\e$(5!^\e(B)
138 ("T" ?\e$(5!)\e(B)
139 ("y" ?\e$(5!J\e(B)
140 ("Y" ?\e$(5!K\e(B)
141 ("u" ?\e$(5!X\e(B)
142 ("U" ?\e$(5!7\e(B)
143 ("i" ?\e$(5!5\e(B)
144 ("I" ?\e$(5!E\e(B)
145 ("o" ?\e$(5!D\e(B)
146 ("O" ?\e$(5!C\e(B)
147 ("p" ?\e$(5!:\e(B)
148 ("P" ?\e$(5!;\e(B)
149 ("[" ?\e$(5!?\e(B)
150 ("{" ?\e$(5!@\e(B)
151 ("]" ?\e$(5!i\e(B)
152 ("}" ?\e$(5!<\e(B)
153 ("\\" ?\e$(5!g\e(B)
154 ("|" ?\e$(5!2\e(B)
155 ("a" ?\e$(5!e\e(B)
156 ("A" ?\e$(5!0\e(B)
157 ("s" ?\e$(5!a\e(B)
158 ("S" ?\e$(5!,\e(B)
159 ("d" ?\e$(5!h\e(B)
160 ("D" ?\e$(5!$\e(B)
161 ("f" ?\e$(5![\e(B)
162 ("F" ?\e$(5!&\e(B)
163 ("g" ?\e$(5!]\e(B)
164 ("G" ?\e$(5!(\e(B)
165 ("h" ?\e$(5!H\e(B)
166 ("H" ?\e$(5!I\e(B)
167 ("j" ?\e$(5!O\e(B)
168 ("J" ?\e$(5!P\e(B)
169 ("k" ?\e$(5!3\e(B)
170 ("K" ?\e$(5!4\e(B)
171 ("l" ?\e$(5!B\e(B)
172 ("L" ?\e$(5!C\e(B)
173 (";" ?\e$(5!8\e(B)
174 (":" ?\e$(5!9\e(B)
175 ("'" ?\e$(5!=\e(B)
176 ("\"" ?\e$(5!>\e(B)
177 ("z" ?\e$(5!`\e(B)
178 ("Z" ?\e$(5!+\e(B)
179 ("x" ?\e$(5!"\e(B)
180 ("X" ?\e$(5!!\e(B)
181 ("c" ?\e$(5!L\e(B)
182 ("C" ?\e$(5!A\e(B)
183 ("v" ?\e$(5!F\e(B)
184 ("V" ?\e$(5!G\e(B)
185 ("b" ?\e$(5!T\e(B)
186 ("B" ?\e$(5!S\e(B)
187 ("n" ?\e$(5!Q\e(B)
188 ("N" ?\e$(5!R\e(B)
189 ("m" ?\e$(5!W\e(B)
190 ("M" ?\e$(5!U\e(B)
191 ;; ("," ?,)
192 ("<" ?\e$(5!V\e(B)
193 ;; ("." ?.)
194 (">" ?\e$(5!j\e(B)
195 ("/" ?\e$(5!M\e(B)
196 ("?" ?\e$(5!N\e(B)
197 )
198
199
200 ;;
201 ;; Quail Devanagari Input By Transliteration
202 ;;
203
204 (eval-when-compile
205
206 (defvar devanagari-consonant-transliteration-alist
207 '(
208 ; GUTTURALS
209 ("k" . "\e$(5!3\e(B")
210 ("k." . "\e$(5!3!i\e(B")
211 ("kh" . "\e$(5!4\e(B")
212 ("kh." . "\e$(5!4!i\e(B")
213 ("g" . "\e$(5!5\e(B")
214 ("g." . "\e$(5!5!i\e(B")
215 ("gh" . "\e$(5!6\e(B")
216 ("G" . "\e$(5!7\e(B")
217 ; PALATALS
218 ("c" . "\e$(5!8\e(B")
219 ("ch" . "\e$(5!9\e(B")
220 ("j" . "\e$(5!:\e(B")
221 ("j." . "\e$(5!:!i\e(B")
222 ("Z" . "\e$(5!:!i\e(B")
223 ("jh" . "\e$(5!;\e(B")
224 ("J" . "\e$(5!<\e(B")
225 ; CEREBRALS
226 ("T" . "\e$(5!=\e(B")
227 ("Th" . "\e$(5!>\e(B")
228 ("D" . "\e$(5!?\e(B")
229 ("D." . "\e$(5!?!i\e(B")
230 ("Dh" . "\e$(5!@\e(B")
231 ("Dh." . "\e$(5!@!i\e(B")
232 ("N" . "\e$(5!A\e(B")
233 ; DENTALS
234 ("t" . "\e$(5!B\e(B")
235 ("th" . "\e$(5!C\e(B")
236 ("d" . "\e$(5!D\e(B")
237 ("dh" . "\e$(5!E\e(B")
238 ("n" . "\e$(5!F\e(B")
239 ("N." . "\e$(5!G\e(B")
240 ; LABIALS
241 ("p" . "\e$(5!H\e(B")
242 ("ph" . "\e$(5!I\e(B")
243 ("ph." . "\e$(5!I!i\e(B")
244 ("f" . "\e$(5!I\e(B")
245 ("f." . "\e$(5!I!i\e(B")
246 ("b" . "\e$(5!J\e(B")
247 ("bh" . "\e$(5!K\e(B")
248 ("m" . "\e$(5!L\e(B")
249 ; SEMIVOWELS
250 ("y" . "\e$(5!M\e(B")
251 ("y." . "\e$(5!N\e(B")
252 ("Y" . "\e$(5!N\e(B")
253 ("r" . "\e$(5!O\e(B")
254 ("r." . "\e$(5!P\e(B")
255 ("l" . "\e$(5!Q\e(B")
256 ("W" . "\e$(5!R\e(B")
257 ("W." . "\e$(5!S\e(B")
258 ("v" . "\e$(5!T\e(B")
259 ("w" . "\e$(5!T\e(B")
260 ; SIBILANTS
261 ("z" . "\e$(5!U\e(B")
262 ("S" . "\e$(5!V\e(B")
263 ("s" . "\e$(5!W\e(B")
264 ("h" . "\e$(5!X\e(B")
265 ))
266
267 (defvar devanagari-vowel-transliteration-alist
268 '(
269 ;; Special treatment unique to IS 13194 Transliteration
270 ("" . "\e$(5!h\e(B")
271 ("a" . "")
272 ; Matra (Vowel Sign)
273 ("A" . "\e$(5!Z\e(B")
274 ("i" . "\e$(5![\e(B")
275 ("I" . "\e$(5!\\e(B")
276 ("u" . "\e$(5!]\e(B")
277 ("U" . "\e$(5!^\e(B")
278 ("R" . "\e$(5!_\e(B")
279 ;; ("RR" . "x") ; not specified in ordinary IS 13194.(but in Unicode??)
280 ("q" . "\e$(5#K\e(B") ; "\e$(5#K\e(B" = "\e$(5!_!i\e(B" in IS 13194.
281 ("L" . "\e$(5#L\e(B") ; "\e$(5#L\e(B" = "\e$(5![!i\e(B" in IS 13194.
282 ("E" . "\e$(5#M\e(B") ; "\e$(5#M\e(B" = "\e$(5!\!i\e(B" in IS 13194.
283 ("E" . "\e$(5!`\e(B") ; only for transcription of other scripts.
284 ("e" . "\e$(5!a\e(B")
285 ("ai" . "\e$(5!b\e(B")
286 ("ae" . "\e$(5!b\e(B") ; variation of transliteration.
287 ("EE" . "\e$(5!c\e(B") ; only for transcription of other scripts. (Candra E)
288 ("O" . "\e$(5!d\e(B") ; only for transcription of other scripts.
289 ("o" . "\e$(5!e\e(B")
290 ("au" . "\e$(5!f\e(B")
291 ("ao" . "\e$(5!f\e(B") ; variation of transliteration.
292 ("OO" . "\e$(5!g\e(B") ; only for transcription of other scripts. (Candra O)
293 ))
294
295 ;;
296 ;; Independent vowels and other signs.
297 ;;
298
299 (defvar devanagari-other-letters-alist
300 '(
301 ("a" . "\e$(5!$\e(B")
302 ("A" . "\e$(5!%\e(B")
303 ("i" . "\e$(5!&\e(B")
304 ("I" . "\e$(5!'\e(B")
305 ("u" . "\e$(5!(\e(B")
306 ("U" . "\e$(5!)\e(B")
307 ("R" . "\e$(5!*\e(B")
308 ;; ("RR" . "x") ; not specified in IS 13194. (but in Unicode??)
309 ("q" . "\e$(5#*\e(B") ; "\e$(5#*\e(B" = "\e$(5!*!i\e(B" in IS 13194.
310 ("L" . "\e$(5#&\e(B") ; "\e$(5#&\e(B" = "\e$(5!&!i\e(B" in IS 13194.
311 ("E" . "\e$(5#'\e(B") ; "\e$(5#'\e(B" = "\e$(5!'!i\e(B" in IS 13194.
312 ("Ex" . "\e$(5!+\e(B") ; only for transcription of other scripts.
313 ("e" . "\e$(5!,\e(B")
314 ("ai" . "\e$(5!-\e(B")
315 ("EE" . "\e$(5!.\e(B") ; only for transcription of other scripts. (Candra E)
316 ("O" . "\e$(5!/\e(B") ; only for transcription of other scripts.
317 ("o" . "\e$(5!0\e(B")
318 ("au" . "\e$(5!1\e(B")
319 ("ao" . "\e$(5!1\e(B") ; variation of transliteration.
320 ("OO" . "\e$(5!2\e(B") ; only for transcription of other scripts. (Candra O)
321 ("'" . "\e$(5#J\e(B") ; avagraha
322 ("@" . "\e$(5#!\e(B") ; OM
323 ("/" . "\e$(5!j\e(B")
324 ("M" . "\e$(5!"\e(B")
325 ("&" . "\e$(5!!\e(B")
326 ("H" . "\e$(5!#\e(B")
327 ("." . "\e$(5!i\e(B") ; Nukta
328 ("0" . "\e$(5!q\e(B")
329 ("1" . "\e$(5!r\e(B")
330 ("2" . "\e$(5!s\e(B")
331 ("3" . "\e$(5!t\e(B")
332 ("4" . "\e$(5!u\e(B")
333 ("5" . "\e$(5!v\e(B")
334 ("6" . "\e$(5!w\e(B")
335 ("7" . "\e$(5!x\e(B")
336 ("8" . "\e$(5!y\e(B")
337 ("9" . "\e$(5!z\e(B")
338 ))
339 )
340
341 (defmacro devanagari-transliteration-quail-define-rules ()
342 (cons 'quail-define-rules
343 (let ((cl devanagari-consonant-transliteration-alist)
344 (ml devanagari-other-letters-alist) rules)
345 (while cl
346 (let ((vl devanagari-vowel-transliteration-alist))
347 (while vl
348 (setq rules
349 (cons (list (concat (car (car cl)) (car (car vl)))
350 (make-vector 1
351 (concat (cdr (car cl)) (cdr (car vl)))))
352 rules))
353 (setq vl (cdr vl))))
354 (setq cl (cdr cl)))
355 (while ml
356 (setq rules (cons (list (car (car ml))
357 (make-vector 1 (cdr (car ml))))
358 rules))
359 (setq ml (cdr ml)))
360 rules)))
361
362 (quail-define-package
363 "devanagari-transliteration" "Devanagari" "DEVt" t
364 "Devanagari input method by transliteration
365 VOWELS : a \e$(5!$\e(B A \e$(5!%\e(B i \e$(5!&\e(B I \e$(5!'\e(B u \e$(5!(\e(B U \e$(5!)\e(B
366 R \e$(5!*\e(B q \e$(5#*\e(B L \e$(5#&\e(B E \e$(5#'\e(B Ex \e$(5!+\e(B e \e$(5!,\e(B
367 ai \e$(5!-\e(B EE \e$(5!.\e(B O \e$(5!/\e(B o \e$(5!0\e(B au \e$(5!1\e(B OO \e$(5!2\e(B
368 GRUTTALS : k \e$(5!3\e(B kh \e$(5!4\e(B g \e$(5!5\e(B gh \e$(5!6\e(B G \e$(5!7\e(B
369 PALATALS : c \e$(5!8\e(B ch \e$(5!9\e(B j \e$(5!:\e(B jh \e$(5!;\e(B J \e$(5!<\e(B (Z \e$(5!:!i\e(B)
370 CEREBRALS : T \e$(5!=\e(B Th \e$(5!>\e(B D \e$(5!?\e(B Dh \e$(5!@\e(B N \e$(5!A\e(B
371 DENTALS : t \e$(5!B\e(B th \e$(5!C\e(B d \e$(5!D\e(B dh \e$(5!E\e(B n \e$(5!F\e(B (Nq \e$(5!G\e(B)
372 LABIALS : p \e$(5!H\e(B ph \e$(5!I\e(B b \e$(5!J\e(B bh \e$(5!K\e(B m \e$(5!L\e(B (f \e$(5!I\e(B)
373 SEMIVOWELS : y \e$(5!M\e(B Y \e$(5!N\e(B r \e$(5!O\e(B Rq \e$(5!P\e(B
374 l \e$(5!Q\e(B W \e$(5!R\e(B W. \e$(5!S\e(B v \e$(5!T\e(B w \e$(5!T\e(B
375 SIBILANTS : z \e$(5!U\e(B S \e$(5!V\e(B s \e$(5!W\e(B h \e$(5!X\e(B
376
377 Specials : Anuswar M \e$(5!"\e(B Visarg H \e$(5!#\e(B
378 Chandrabindu & \e$(5!!\e(B Nukta . \e$(5!i\e(B
379 Danda / \e$(5!j\e(B Avagrah ' \e$(5#J\e(B
380 OM @ \e$(5#!\e(B
381 "
382 nil t t nil nil nil nil nil
383 ;; 'quail-devanagari-update-translation
384 nil
385 '((" " . quail-devanagari-compose-characters)
386 ("-" . quail-devanagari-compose-characters)
387 ("," . quail-devanagari-compose-characters)
388 ("\C-m" . quail-devanagari-compose-characters)
389 ([return] . quail-devanagari-compose-characters))
390 )
391
392 (devanagari-transliteration-quail-define-rules)
393
394 ;;
395 ;; ITRANS - Indian Script Translation
396 ;;
397
398 (eval-and-compile
399
400 (defun rule-indian-to-devanagari (alist)
401 (if (null alist) nil
402 (cons (cons (car (car alist))
403 (indian-to-devanagari-string (cdr (car alist))))
404 (rule-indian-to-devanagari (cdr alist)))))
405 )
406
407 (eval-when-compile
408
409 (defvar devanagari-consonant-itrans-alist
410 (rule-indian-to-devanagari indian-itrans-consonant-alist))
411
412 (defvar devanagari-vowel-itrans-alist
413 (rule-indian-to-devanagari indian-itrans-vowel-sign-alist))
414
415 (defvar devanagari-other-letters-itrans-alist
416 (rule-indian-to-devanagari indian-itrans-other-letters-alist))
417
418 )
419
420 (defmacro devanagari-itrans-quail-define-rules ()
421 (cons 'quail-define-rules
422 (let ((cl devanagari-consonant-itrans-alist)
423 (ml devanagari-other-letters-itrans-alist) rules)
424 (while cl
425 (let ((vl devanagari-vowel-itrans-alist))
426 (while vl
427 (setq rules
428 (cons (list (concat (car (car cl)) (car (car vl)))
429 (make-vector 1
430 (concat (cdr (car cl)) (cdr (car vl)))))
431 rules))
432 (setq vl (cdr vl))))
433 (setq cl (cdr cl)))
434 (while ml
435 (setq rules (cons (list (car (car ml))
436 (make-vector 1 (cdr (car ml))))
437 rules))
438 (setq ml (cdr ml)))
439 rules)))
440
441 (quail-define-package
442 "devanagari-itrans" "Devanagari" "DEVi" t
443 "Devanagari input method by ITRANS
444 Special Keys : Anuswar n'
445 Chandrabindu nn'
446 Visarg nh
447 Nukta type capital letter for first character.
448 \e$(5!7\e(B(ng) \e$(5!<\e(B(ny) \e$(5!A\e(B(nn) \e$(5!F\e(B(n) \e$(5!G\e(B(nnn)
449 "
450 nil t t nil nil nil nil nil
451 ;; 'quail-devanagari-update-translation
452 nil
453 '((" " . quail-devanagari-compose-characters)
454 ("-" . quail-devanagari-compose-characters)
455 ("," . quail-devanagari-compose-characters)
456 ("\C-m" . quail-devanagari-compose-characters)
457 ([return] . quail-devanagari-compose-characters))
458 )
459
460 (devanagari-itrans-quail-define-rules)
461
462
463 ;;
464 ;; Quail Hindi Input By Transliteration
465 ;;
466
467 (defun quail-devanagari-hindi-compose-characters ()
468 (interactive)
469 (if (quail-point-in-conversion-region)
470 (let* ((from (overlay-start quail-conv-overlay))
471 (to (overlay-end quail-conv-overlay))
472 (dstr (buffer-substring from to)))
473 (delete-overlay quail-overlay)
474 (delete-overlay quail-conv-overlay)
475 (save-restriction
476 (narrow-to-region from to)
477 (goto-char (point-min))
478 (delete-region (point-min) (point-max))
479 (insert (devanagari-compose-string dstr))
480 (goto-char (point-max)))
481 (move-overlay quail-conv-overlay from (point))
482 (setq unread-command-events (list last-command-event))
483 (throw 'exit nil))
484 (setq unread-command-events (list last-command-event))
485 (throw 'exit nil)))
486
487 (eval-when-compile
488
489 (defvar devanagari-hindi-consonant-transliteration-alist
490 '(
491 ; GUTTURALS
492 ("k" . "\e$(5!3\e(B")
493 ("ks" . "\e$(5$.\e(B")
494 ("k." . "\e$(5!3!i\e(B")
495 ("kh" . "\e$(5!4\e(B")
496 ("kh." . "\e$(5!4!i\e(B")
497 ("g" . "\e$(5!5\e(B")
498 ("g." . "\e$(5!5!i\e(B")
499 ("gh" . "\e$(5!6\e(B")
500 ("G" . "\e$(5!7\e(B")
501 ; PALATALS
502 ("ch" . "\e$(5!8\e(B")
503 ("chh" . "\e$(5!9\e(B")
504 ("j" . "\e$(5!:\e(B")
505 ("j." . "\e$(5!:!i\e(B")
506 ("z" . "\e$(5!:!i\e(B")
507 ("jh" . "\e$(5!;\e(B")
508 ("J" . "\e$(5!<\e(B")
509 ; CEREBRALS
510 ("T" . "\e$(5!=\e(B")
511 ("Th" . "\e$(5!>\e(B")
512 ("D" . "\e$(5!?\e(B")
513 ("D." . "\e$(5!?!i\e(B")
514 ("Dh" . "\e$(5!@\e(B")
515 ("Dh." . "\e$(5!@!i\e(B")
516 ("N" . "\e$(5!A\e(B")
517 ; DENTALS
518 ("t" . "\e$(5!B\e(B")
519 ("th" . "\e$(5!C\e(B")
520 ("d" . "\e$(5!D\e(B")
521 ("dh" . "\e$(5!E\e(B")
522 ("n" . "\e$(5!F\e(B")
523 ("N." . "\e$(5!G\e(B")
524 ; LABIALS
525 ("p" . "\e$(5!H\e(B")
526 ("ph" . "\e$(5!I\e(B")
527 ("ph." . "\e$(5!I!i\e(B")
528 ("f" . "\e$(5!I\e(B")
529 ("f." . "\e$(5!I!i\e(B")
530 ("b" . "\e$(5!J\e(B")
531 ("bh" . "\e$(5!K\e(B")
532 ("m" . "\e$(5!L\e(B")
533 ; SEMIVOWELS
534 ("y" . "\e$(5!M\e(B")
535 ("y." . "\e$(5!N\e(B")
536 ("Y" . "\e$(5!N\e(B")
537 ("r" . "\e$(5!O\e(B")
538 ("r." . "\e$(5!P\e(B")
539 ("l" . "\e$(5!Q\e(B")
540 ("W" . "\e$(5!R\e(B")
541 ("W." . "\e$(5!S\e(B")
542 ("v" . "\e$(5!T\e(B")
543 ("w" . "\e$(5!T\e(B")
544 ; SIBILANTS
545 ("sh" . "\e$(5!U\e(B")
546 ("S" . "\e$(5!V\e(B")
547 ("s" . "\e$(5!W\e(B")
548 ("h" . "\e$(5!X\e(B")
549 ; Special for Hindi
550 ("ks" . "\e$(5$.\e(B")
551 ("tr" . "\e$(5"%\e(B")
552 ("xn" . "\e$(5$E\e(B")
553 ))
554
555 (defvar devanagari-hindi-vowel-transliteration-alist
556 '(
557 ; In hindi, halant sign is rarely used so should explicity typed in.
558 ("" . "")
559 ("~" . "\e$(5!h\e(B")
560 ; Matra (Vowel Sign)
561 ("a" . "\e$(5!Z\e(B")
562 ("i" . "\e$(5![\e(B")
563 ("I" . "\e$(5!\\e(B")
564 ("u" . "\e$(5!]\e(B")
565 ("U" . "\e$(5!^\e(B")
566 ("R" . "\e$(5!_\e(B")
567 ;; ("RR" . "x") ; not specified in ordinary IS 13194.(but in Unicode??)
568 ("q" . "\e$(5#K\e(B") ; "\e$(5#K\e(B" = "\e$(5!_!i\e(B" in IS 13194.
569 ("L" . "\e$(5#L\e(B") ; "\e$(5#L\e(B" = "\e$(5![!i\e(B" in IS 13194.
570 ("E" . "\e$(5#M\e(B") ; "\e$(5#M\e(B" = "\e$(5!\!i\e(B" in IS 13194.
571 ("E" . "\e$(5!`\e(B") ; only for transcription of other scripts.
572 ("e" . "\e$(5!a\e(B")
573 ("ai" . "\e$(5!b\e(B")
574 ("ae" . "\e$(5!b\e(B") ; variation of transliteration.
575 ("EE" . "\e$(5!c\e(B") ; only for transcription of other scripts. (Candra E)
576 ("O" . "\e$(5!d\e(B") ; only for transcription of other scripts.
577 ("o" . "\e$(5!e\e(B")
578 ("au" . "\e$(5!f\e(B")
579 ("ao" . "\e$(5!f\e(B") ; variation of transliteration.
580 ("OO" . "\e$(5!g\e(B") ; only for transcription of other scripts. (Candra O)
581 ))
582
583 ;;
584 ;; Independent vowels and other signs.
585 ;;
586
587 (defvar devanagari-hindi-other-letters-alist
588 '(
589 ("a" . "\e$(5!$\e(B")
590 ("A" . "\e$(5!%\e(B")
591 ("i" . "\e$(5!&\e(B")
592 ("I" . "\e$(5!'\e(B")
593 ("u" . "\e$(5!(\e(B")
594 ("U" . "\e$(5!)\e(B")
595 ("R" . "\e$(5!*\e(B")
596 ;; ("RR" . "x") ; not specified in IS 13194. (but in Unicode??)
597 ("q" . "\e$(5#*\e(B") ; "\e$(5#*\e(B" = "\e$(5!*!i\e(B" in IS 13194.
598 ("L" . "\e$(5#&\e(B") ; "\e$(5#&\e(B" = "\e$(5!&!i\e(B" in IS 13194.
599 ("E" . "\e$(5#'\e(B") ; "\e$(5#'\e(B" = "\e$(5!'!i\e(B" in IS 13194.
600 ("Ex" . "\e$(5!+\e(B") ; only for transcription of other scripts.
601 ("e" . "\e$(5!,\e(B")
602 ("ai" . "\e$(5!-\e(B")
603 ("EE" . "\e$(5!.\e(B") ; only for transcription of other scripts. (Candra E)
604 ("O" . "\e$(5!/\e(B") ; only for transcription of other scripts.
605 ("o" . "\e$(5!0\e(B")
606 ("au" . "\e$(5!1\e(B")
607 ("ao" . "\e$(5!1\e(B") ; variation of transliteration.
608 ("OO" . "\e$(5!2\e(B") ; only for transcription of other scripts. (Candra O)
609 ("'" . "\e$(5#J\e(B") ; avagraha
610 ("@" . "\e$(5#!\e(B") ; OM
611 ("/" . "\e$(5!j\e(B")
612 ("M" . "\e$(5!"\e(B")
613 ("&" . "\e$(5!!\e(B")
614 ("H" . "\e$(5!#\e(B")
615 ("." . "\e$(5!i\e(B") ; Nukta
616 ("0" . "\e$(5!q\e(B")
617 ("1" . "\e$(5!r\e(B")
618 ("2" . "\e$(5!s\e(B")
619 ("3" . "\e$(5!t\e(B")
620 ("4" . "\e$(5!u\e(B")
621 ("5" . "\e$(5!v\e(B")
622 ("6" . "\e$(5!w\e(B")
623 ("7" . "\e$(5!x\e(B")
624 ("8" . "\e$(5!y\e(B")
625 ("9" . "\e$(5!z\e(B")
626 ))
627 )
628
629 (defmacro devanagari-hindi-transliteration-quail-define-rules ()
630 (cons 'quail-define-rules
631 (let ((cl devanagari-hindi-consonant-transliteration-alist)
632 (ml devanagari-hindi-other-letters-alist) rules)
633 (while cl
634 (let ((vl devanagari-hindi-vowel-transliteration-alist))
635 (while vl
636 (setq rules
637 (cons (list (concat (car (car cl)) (car (car vl)))
638 (make-vector 1
639 (concat (cdr (car cl)) (cdr (car vl)))))
640 rules))
641 (setq vl (cdr vl))))
642 (setq cl (cdr cl)))
643 (while ml
644 (setq rules (cons (list (car (car ml))
645 (make-vector 1 (cdr (car ml))))
646 rules))
647 (setq ml (cdr ml)))
648 rules)))
649
650 (quail-define-package
651 "devanagari-hindi-transliteration" "Hindi" "HINt" t
652 "Devanagari-Hindi input method by transliteration
653 VOWELS : a \e$(5!$\e(B A \e$(5!%\e(B i \e$(5!&\e(B I \e$(5!'\e(B u \e$(5!(\e(B U \e$(5!)\e(B
654 R \e$(5!*\e(B q \e$(5#*\e(B L \e$(5#&\e(B E \e$(5#'\e(B Ex \e$(5!+\e(B e \e$(5!,\e(B
655 ai \e$(5!-\e(B EE \e$(5!.\e(B O \e$(5!/\e(B o \e$(5!0\e(B au \e$(5!1\e(B OO \e$(5!2\e(B
656 GRUTTALS : k \e$(5!3\e(B kh \e$(5!4\e(B g \e$(5!5\e(B gh \e$(5!6\e(B G \e$(5!7\e(B
657 PALATALS : c \e$(5!8\e(B ch \e$(5!9\e(B j \e$(5!:\e(B jh \e$(5!;\e(B J \e$(5!<\e(B z \e$(5!:!i\e(B
658 CEREBRALS : T \e$(5!=\e(B Th \e$(5!>\e(B D \e$(5!?\e(B Dh \e$(5!@\e(B N \e$(5!A\e(B
659 DENTALS : t \e$(5!B\e(B th \e$(5!C\e(B d \e$(5!D\e(B dh \e$(5!E\e(B n \e$(5!F\e(B (Nq \e$(5!G\e(B)
660 LABIALS : p \e$(5!H\e(B ph \e$(5!I\e(B b \e$(5!J\e(B bh \e$(5!K\e(B m \e$(5!L\e(B (f \e$(5!I\e(B)
661 SEMIVOWELS : y \e$(5!M\e(B Y \e$(5!N\e(B r \e$(5!O\e(B Rq \e$(5!P\e(B
662 l \e$(5!Q\e(B W \e$(5!R\e(B W. \e$(5!S\e(B v \e$(5!T\e(B w \e$(5!T\e(B
663 SIBILANTS : sh \e$(5!U\e(B S \e$(5!V\e(B s \e$(5!W\e(B h \e$(5!X\e(B
664 OTHERS : ks \e$(5$.\e(B tr \e$(5"%\e(B xn \e$(5$E\e(B
665
666 Specials : Anuswar M \e$(5!"\e(B Visarg H \e$(5!#\e(B
667 Chandrabindu & \e$(5!!\e(B Nukta . \e$(5!i\e(B
668 Danda / \e$(5!j\e(B Avagrah ' \e$(5#J\e(B
669 OM @ \e$(5#!\e(B Halant ~ \e$(5!h\e(B
670 "
671 nil t t nil nil nil nil nil
672 ;; 'quail-devanagari-update-translation
673 nil
674 '((" " . quail-devanagari-hindi-compose-characters)
675 ("-" . quail-devanagari-hindi-compose-characters)
676 ("," . quail-devanagari-hindi-compose-characters)
677 ("\C-m" . quail-devanagari-hindi-compose-characters)
678 ([return] . quail-devanagari-hindi-compose-characters))
679 )
680
681 (devanagari-hindi-transliteration-quail-define-rules)