(show-paren-match-face): Use gray on all non-color screens.
[emacs.git] / leim / quail / devanagari.el
blob675bea0e1242b4d97e698fcfa593aafcf45039c4
1 ;; quail/devanagari.el -- Quail packages for inputting Devanagari
3 ;; Copyright (C) 1997 Free Software Foundation, Inc.
5 ;; Author: KAWABATA, Taichi <kawabata@is.s.u-tokyo.ac.jp>
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 2, or (at your option)
14 ;; 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; 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.
26 ;;; Commentary:
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
32 ;; I'm not sure if this keyboard layout is REALLY an ISCII keyboard layout.
33 ;; Please let me know if it is not.
35 ;;; Code:
37 (require 'quail)
38 (require 'devan-util)
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))))))
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)))
72 (quail-define-package
73 "devanagari-keyboard-a" "Devanagari" "DevK" t
74 "Devanagari input method with ISCII format
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
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
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
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
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))
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.
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)
201 ;; Quail Devanagari Input By Transliteration
204 (eval-when-compile
206 (defvar devanagari-consonant-transliteration-alist
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")
267 (defvar devanagari-vowel-transliteration-alist
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)
296 ;; Independent vowels and other signs.
299 (defvar devanagari-other-letters-alist
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")
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)))
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
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
382 nil t t nil nil nil nil nil
383 ;; 'quail-devanagari-update-translation
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))
392 (devanagari-transliteration-quail-define-rules)
395 ;; ITRANS - Indian Script Translation
398 (eval-and-compile
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)))))
407 (eval-when-compile
409 (defvar devanagari-consonant-itrans-alist
410 (rule-indian-to-devanagari indian-itrans-consonant-alist))
412 (defvar devanagari-vowel-itrans-alist
413 (rule-indian-to-devanagari indian-itrans-vowel-sign-alist))
415 (defvar devanagari-other-letters-itrans-alist
416 (rule-indian-to-devanagari indian-itrans-other-letters-alist))
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)))
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)
450 nil t t nil nil nil nil nil
451 ;; 'quail-devanagari-update-translation
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))
460 (devanagari-itrans-quail-define-rules)
464 ;; Quail Hindi Input By Transliteration
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)))
487 (eval-when-compile
489 (defvar devanagari-hindi-consonant-transliteration-alist
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")
555 (defvar devanagari-hindi-vowel-transliteration-alist
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)
584 ;; Independent vowels and other signs.
587 (defvar devanagari-hindi-other-letters-alist
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")
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)))
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
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
671 nil t t nil nil nil nil nil
672 ;; 'quail-devanagari-update-translation
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))
681 (devanagari-hindi-transliteration-quail-define-rules)