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