Add entry to NEWS
[emacs.git] / lisp / language / ind-util.el
blob56893af14791a7ab2d7ced4638401f77318e5acb
1 ;;; ind-util.el --- Transliteration and Misc. Tools for Indian Languages -*- coding: iso-2022-7bit; -*-
3 ;; Copyright (C) 2001-2011 Free Software Foundation, Inc.
5 ;; Maintainer: KAWABATA, Taichi <kawabata@m17n.org>
6 ;; Keywords: multilingual, Indian, Devanagari
8 ;; This file is part of GNU Emacs.
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation, either version 3 of the License, or
13 ;; (at your option) any later version.
15 ;; GNU Emacs is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details.
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
23 ;;; Commentary:
25 ;; This file provides conversion between UCS and various
26 ;; transliteration schemes, such as ITRANS, kyoto-harvard and aiba
27 ;; methods. It also provides conversion between IS 13194 and UCS.
28 ;; Finally, this program provides the compatibility support with
29 ;; old implementation of Devanagari script.
31 ;;; Code:
33 ;;; Transliteration
35 ;; The followings provide the various transliteration schemes (such as
36 ;; ITRANS, kyoto-harvard, and Aiba) of Indian scripts. They are also
37 ;; used in quail/indian.el for typing Indian script in Emacs.
39 (eval-and-compile
41 (defun indian-regexp-of-hashtbl-keys (hashtbl)
42 "Returns the regular expression of hashtable keys."
43 (let (keys)
44 (maphash (lambda (key val) (push key keys)) hashtbl)
45 (regexp-opt keys)))
47 (defvar indian-dev-base-table
49 (;; VOWELS (18)
50 (?\e$,15E\e(B nil) (?\e$,15F\e(B ?\e$,15~\e(B) (?\e$,15G\e(B ?\e$,15\x7f\e(B) (?\e$,15H\e(B ?\e$,16 \e(B) (?\e$,15I\e(B ?\e$,16!\e(B) (?\e$,15J\e(B ?\e$,16"\e(B)
51 (?\e$,15K\e(B ?\e$,16#\e(B) (?\e$,15L\e(B ?\e$,16B\e(B) (?\e$,15M\e(B ?\e$,16%\e(B) (?\e$,15N\e(B ?\e$,16&\e(B) (?\e$,15O\e(B ?\e$,16'\e(B) (?\e$,15P\e(B ?\e$,16(\e(B)
52 (?\e$,15Q\e(B ?\e$,16)\e(B) (?\e$,15R\e(B ?\e$,16*\e(B) (?\e$,15S\e(B ?\e$,16+\e(B) (?\e$,15T\e(B ?\e$,16,\e(B) (?\e$,16@\e(B ?\e$,16$\e(B) (?\e$,16A\e(B ?\e$,16C\e(B))
53 (;; CONSONANTS (currently 42, including special cases)
54 ?\e$,15U\e(B ?\e$,15V\e(B ?\e$,15W\e(B ?\e$,15X\e(B ?\e$,15Y\e(B ;; GUTTRULS
55 ?\e$,15Z\e(B ?\e$,15[\e(B ?\e$,15\\e(B ?\e$,15]\e(B ?\e$,15^\e(B ;; PALATALS
56 ?\e$,15_\e(B ?\e$,15`\e(B ?\e$,15a\e(B ?\e$,15b\e(B ?\e$,15c\e(B ;; CEREBRALS
57 ?\e$,15d\e(B ?\e$,15e\e(B ?\e$,15f\e(B ?\e$,15g\e(B ?\e$,15h\e(B ?\e$,15i\e(B ;; DENTALS
58 ?\e$,15j\e(B ?\e$,15k\e(B ?\e$,15l\e(B ?\e$,15m\e(B ?\e$,15n\e(B ;; LABIALS
59 ?\e$,15o\e(B ?\e$,15p\e(B ?\e$,15q\e(B ?\e$,15r\e(B ?\e$,15s\e(B ?\e$,15t\e(B ?\e$,15u\e(B ;; SEMIVOWELS
60 ?\e$,15v\e(B ?\e$,15w\e(B ?\e$,15x\e(B ?\e$,15y\e(B ;; SIBILANTS
61 ?\e$,168\e(B ?\e$,169\e(B ?\e$,16:\e(B ?\e$,16;\e(B ?\e$,16<\e(B ?\e$,16=\e(B ?\e$,16>\e(B ?\e$,16?\e(B ;; NUKTAS
62 "\e$,15\6-5^\e(B" "\e$,15U6-5w\e(B")
63 (;; Misc Symbols (7)
64 ?\e$,15A\e(B ?\e$,15B\e(B ?\e$,15C\e(B ?\e$,15}\e(B ?\e$,16-\e(B ?\e$,160\e(B ?\e$,16D\e(B)
65 (;; Digits (10)
66 ?\e$,16F\e(B ?\e$,16G\e(B ?\e$,16H\e(B ?\e$,16I\e(B ?\e$,16J\e(B ?\e$,16K\e(B ?\e$,16L\e(B ?\e$,16M\e(B ?\e$,16N\e(B ?\e$,16O\e(B)
67 (;; Inscript-extra (4) (#, $, ^, *, ])
68 "\e$,16-5p\e(B" "\e$,15p6-\e(B" "\e$,15d6-5p\e(B" "\e$,15v6-5p\e(B" "\e$,15|\e(B")))
70 ;; Punjabi is also known as Gurmukhi.
71 (defvar indian-pnj-base-table
73 (;; VOWELS
74 (?\e$,18%\e(B nil) (?\e$,18&\e(B ?\e$,18^\e(B) (?\e$,18'\e(B ?\e$,18_\e(B) (?\e$,18(\e(B ?\e$,18`\e(B) (?\e$,18)\e(B ?\e$,18a\e(B) (?\e$,18*\e(B ?\e$,18b\e(B)
75 nil nil nil nil (?\e$,18/\e(B ?\e$,18g\e(B) (?\e$,180\e(B ?\e$,18h\e(B)
76 nil nil (?\e$,183\e(B ?\e$,18k\e(B) (?\e$,184\e(B ?\e$,18l\e(B) nil nil)
77 (;; CONSONANTS
78 ?\e$,185\e(B ?\e$,186\e(B ?\e$,187\e(B ?\e$,188\e(B ?\e$,189\e(B ;; GUTTRULS
79 ?\e$,18:\e(B ?\e$,18;\e(B ?\e$,18<\e(B ?\e$,18=\e(B ?\e$,18>\e(B ;; PALATALS
80 ?\e$,18?\e(B ?\e$,18@\e(B ?\e$,18A\e(B ?\e$,18B\e(B ?\e$,18C\e(B ;; CEREBRALS
81 ?\e$,18D\e(B ?\e$,18E\e(B ?\e$,18F\e(B ?\e$,18G\e(B ?\e$,18H\e(B nil ;; DENTALS
82 ?\e$,18J\e(B ?\e$,18K\e(B ?\e$,18L\e(B ?\e$,18M\e(B ?\e$,18N\e(B ;; LABIALS
83 ?\e$,18O\e(B ?\e$,18P\e(B nil ?\e$,18R\e(B ?\e$,18S\e(B nil ?\e$,18U\e(B ;; SEMIVOWELS
84 ?\e$,18V\e(B nil ?\e$,18X\e(B ?\e$,18Y\e(B ;; SIBILANTS
85 nil ?\e$,18y\e(B ?\e$,18z\e(B ?\e$,18{\e(B ?\e$,18|\e(B nil ?\e$,18~\e(B nil ;; NUKTAS
86 "\e$,18<8m8>\e(B" nil)
87 (;; Misc Symbols (7)
88 nil ?\e$,18"\e(B nil nil ?\e$,18m\e(B nil nil) ;; ek onkar, etc.
89 (;; Digits
90 ?\e$,19&\e(B ?\e$,19'\e(B ?\e$,19(\e(B ?\e$,19)\e(B ?\e$,19*\e(B ?\e$,19+\e(B ?\e$,19,\e(B ?\e$,19-\e(B ?\e$,19.\e(B ?\e$,19/\e(B)
91 (;; Inscript-extra (4) (#, $, ^, *, ])
92 "\e$,18m8P\e(B" "\e$,18P8m\e(B" "\e$,18D8m8P\e(B" "\e$,18V8m8P\e(B" "\e$,18\\e(B")))
94 (defvar indian-gjr-base-table
96 (;; VOWELS
97 (?\e$,19E\e(B nil) (?\e$,19F\e(B ?\e$,19~\e(B) (?\e$,19G\e(B ?\e$,19\x7f\e(B) (?\e$,19H\e(B ?\e$,1: \e(B) (?\e$,19I\e(B ?\e$,1:!\e(B) (?\e$,19J\e(B ?\e$,1:"\e(B)
98 (?\e$,19K\e(B ?\e$,1:#\e(B) nil (?\e$,19M\e(B ?\e$,1:%\e(B) nil (?\e$,19O\e(B ?\e$,1:'\e(B) (?\e$,19P\e(B ?\e$,1:(\e(B)
99 (?\e$,19Q\e(B ?\e$,1:)\e(B) nil (?\e$,19S\e(B ?\e$,1:+\e(B) (?\e$,19T\e(B ?\e$,1:,\e(B) (?\e$,1:@\e(B ?\e$,1:$\e(B) nil)
100 (;; CONSONANTS
101 ?\e$,19U\e(B ?\e$,19V\e(B ?\e$,19W\e(B ?\e$,19X\e(B ?\e$,19Y\e(B ;; GUTTRULS
102 ?\e$,19Z\e(B ?\e$,19[\e(B ?\e$,19\\e(B ?\e$,19]\e(B ?\e$,19^\e(B ;; PALATALS
103 ?\e$,19_\e(B ?\e$,19`\e(B ?\e$,19a\e(B ?\e$,19b\e(B ?\e$,19c\e(B ;; CEREBRALS
104 ?\e$,19d\e(B ?\e$,19e\e(B ?\e$,19f\e(B ?\e$,19g\e(B ?\e$,19h\e(B nil ;; DENTALS
105 ?\e$,19j\e(B ?\e$,19k\e(B ?\e$,19l\e(B ?\e$,19m\e(B ?\e$,19n\e(B ;; LABIALS
106 ?\e$,19o\e(B ?\e$,19p\e(B nil ?\e$,19r\e(B ?\e$,19s\e(B nil ?\e$,19u\e(B ;; SEMIVOWELS
107 ?\e$,19v\e(B ?\e$,19w\e(B ?\e$,19x\e(B ?\e$,19y\e(B ;; SIBILANTS
108 nil nil nil nil nil nil nil nil ;; NUKTAS
109 "\e$,19\:-9^\e(B" "\e$,19U:-9w\e(B")
110 (;; Misc Symbols (7)
111 ?\e$,19A\e(B ?\e$,19B\e(B ?\e$,19C\e(B ?\e$,19}\e(B ?\e$,1:-\e(B ?\e$,1:0\e(B nil)
112 (;; Digits
113 ?\e$,1:F\e(B ?\e$,1:G\e(B ?\e$,1:H\e(B ?\e$,1:I\e(B ?\e$,1:J\e(B ?\e$,1:K\e(B ?\e$,1:L\e(B ?\e$,1:M\e(B ?\e$,1:N\e(B ?\e$,1:O\e(B)
114 (;; Inscript-extra (4) (#, $, ^, *, ])
115 "\e$,1:-9p\e(B" "\e$,19p:-\e(B" "\e$,19d:-9p\e(B" "\e$,19v:-9p\e(B" "\e$,19|\e(B")))
117 (defvar indian-ori-base-table
119 (;; VOWELS
120 (?\e$,1:e\e(B nil) (?\e$,1:f\e(B ?\e$,1;>\e(B) (?\e$,1:g\e(B ?\e$,1;?\e(B) (?\e$,1:h\e(B ?\e$,1;@\e(B) (?\e$,1:i\e(B ?\e$,1;A\e(B) (?\e$,1:j\e(B ?\e$,1;B\e(B)
121 (?\e$,1:k\e(B ?\e$,1;C\e(B) (?\e$,1:l\e(B nil) nil nil (?\e$,1:o\e(B ?\e$,1;G\e(B) (?\e$,1:p\e(B ?\e$,1;H\e(B)
122 nil nil (?\e$,1:s\e(B ?\e$,1;K\e(B) (?\e$,1:t\e(B ?\e$,1;L\e(B) (?\e$,1;`\e(B nil) (?\e$,1;a\e(B nil))
123 (;; CONSONANTS
124 ?\e$,1:u\e(B ?\e$,1:v\e(B ?\e$,1:w\e(B ?\e$,1:x\e(B ?\e$,1:y\e(B ;; GUTTRULS
125 ?\e$,1:z\e(B ?\e$,1:{\e(B ?\e$,1:|\e(B ?\e$,1:}\e(B ?\e$,1:~\e(B ;; PALATALS
126 ?\e$,1:\x7f\e(B ?\e$,1; \e(B ?\e$,1;!\e(B ?\e$,1;"\e(B ?\e$,1;#\e(B ;; CEREBRALS
127 ?\e$,1;$\e(B ?\e$,1;%\e(B ?\e$,1;&\e(B ?\e$,1;'\e(B ?\e$,1;(\e(B nil ;; DENTALS
128 ?\e$,1;*\e(B ?\e$,1;+\e(B ?\e$,1;,\e(B ?\e$,1;-\e(B ?\e$,1;.\e(B ;; LABIALS
129 ?\e$,1;/\e(B ?\e$,1;0\e(B nil ?\e$,1;2\e(B ?\e$,1;3\e(B nil nil ;; SEMIVOWELS
130 ?\e$,1;6\e(B ?\e$,1;7\e(B ?\e$,1;8\e(B ?\e$,1;9\e(B ;; SIBILANTS
131 nil nil nil nil ?\e$,1;\\e(B ?\e$,1;]\e(B nil ?\e$,1;_\e(B ;; NUKTAS
132 "\e$,1:|;M:~\e(B" "\e$,1:u;M;7\e(B")
133 (;; Misc Symbols
134 ?\e$,1:a\e(B ?\e$,1:b\e(B ?\e$,1:c\e(B ?\e$,1;=\e(B ?\e$,1;M\e(B nil nil)
135 (;; Digits
136 ?\e$,1;f\e(B ?\e$,1;g\e(B ?\e$,1;h\e(B ?\e$,1;i\e(B ?\e$,1;j\e(B ?\e$,1;k\e(B ?\e$,1;l\e(B ?\e$,1;m\e(B ?\e$,1;n\e(B ?\e$,1;o\e(B)
137 (;; Inscript-extra (4) (#, $, ^, *, ])
138 "\e$,1;M;0\e(B" "\e$,1;0;M\e(B" "\e$,1;$;M;0\e(B" "\e$,1;6;M;0\e(B" "\e$,1;<\e(B")))
140 (defvar indian-bng-base-table
142 (;; VOWELS
143 (?\e$,16e\e(B nil) (?\e$,16f\e(B ?\e$,17>\e(B) (?\e$,16g\e(B ?\e$,17?\e(B) (?\e$,16h\e(B ?\e$,17@\e(B) (?\e$,16i\e(B ?\e$,17A\e(B) (?\e$,16j\e(B ?\e$,17B\e(B)
144 (?\e$,16k\e(B ?\e$,17C\e(B) (?\e$,16l\e(B ?\e$,17b\e(B) nil nil (?\e$,16o\e(B ?\e$,17G\e(B) (?\e$,16p\e(B ?\e$,17H\e(B)
145 nil nil (?\e$,16s\e(B ?\e$,17K\e(B) (?\e$,16t\e(B ?\e$,17L\e(B) (?\e$,17`\e(B ?\e$,17D\e(B) (?\e$,17a\e(B ?\e$,17c\e(B))
146 (;; CONSONANTS
147 ?\e$,16u\e(B ?\e$,16v\e(B ?\e$,16w\e(B ?\e$,16x\e(B ?\e$,16y\e(B ;; GUTTRULS
148 ?\e$,16z\e(B ?\e$,16{\e(B ?\e$,16|\e(B ?\e$,16}\e(B ?\e$,16~\e(B ;; PALATALS
149 ?\e$,16\x7f\e(B ?\e$,17 \e(B ?\e$,17!\e(B ?\e$,17"\e(B ?\e$,17#\e(B ;; CEREBRALS
150 ?\e$,17$\e(B ?\e$,17%\e(B ?\e$,17&\e(B ?\e$,17'\e(B ?\e$,17(\e(B nil ;; DENTALS
151 ?\e$,17*\e(B ?\e$,17+\e(B ?\e$,17,\e(B ?\e$,17-\e(B ?\e$,17.\e(B ;; LABIALS
152 ?\e$,17/\e(B ?\e$,170\e(B nil ?\e$,172\e(B nil nil nil ;; SEMIVOWELS
153 ?\e$,176\e(B ?\e$,177\e(B ?\e$,178\e(B ?\e$,179\e(B ;; SIBILANTS
154 nil nil nil nil ?\e$,17\\e(B ?\e$,17]\e(B nil ?\e$,17_\e(B ;; NUKTAS
155 "\e$,16|7M6~\e(B" "\e$,16u7M77\e(B")
156 (;; Misc Symbols
157 ?\e$,16a\e(B ?\e$,16b\e(B ?\e$,16c\e(B nil ?\e$,17M\e(B nil nil)
158 (;; Digits
159 ?\e$,17f\e(B ?\e$,17g\e(B ?\e$,17h\e(B ?\e$,17i\e(B ?\e$,17j\e(B ?\e$,17k\e(B ?\e$,17l\e(B ?\e$,17m\e(B ?\e$,17n\e(B ?\e$,17o\e(B)
160 (;; Inscript-extra (4) (#, $, ^, *, ])
161 "\e$,17M70\e(B" "\e$,1707M\e(B" "\e$,17$7M70\e(B" "\e$,1767M70\e(B" "\e$,17<\e(B")))
163 (defvar indian-asm-base-table
165 (;; VOWELS
166 (?\e$,16e\e(B nil) (?\e$,16f\e(B ?\e$,17>\e(B) (?\e$,16g\e(B ?\e$,17?\e(B) (?\e$,16h\e(B ?\e$,17@\e(B) (?\e$,16i\e(B ?\e$,17A\e(B) (?\e$,16j\e(B ?\e$,17B\e(B)
167 (?\e$,16k\e(B ?\e$,17C\e(B) (?\e$,16l\e(B ?\e$,17b\e(B) nil nil (?\e$,16o\e(B ?\e$,17G\e(B) (?\e$,16p\e(B ?\e$,17H\e(B)
168 nil nil (?\e$,16s\e(B ?\e$,17K\e(B) (?\e$,16t\e(B ?\e$,17L\e(B) (?\e$,17`\e(B ?\e$,17D\e(B) (?\e$,17a\e(B ?\e$,17c\e(B))
169 (;; CONSONANTS
170 ?\e$,16u\e(B ?\e$,16v\e(B ?\e$,16w\e(B ?\e$,16x\e(B ?\e$,16y\e(B ;; GUTTRULS
171 ?\e$,16z\e(B ?\e$,16{\e(B ?\e$,16|\e(B ?\e$,16}\e(B ?\e$,16~\e(B ;; PALATALS
172 ?\e$,16\x7f\e(B ?\e$,17 \e(B ?\e$,17!\e(B ?\e$,17"\e(B ?\e$,17#\e(B ;; CEREBRALS
173 ?\e$,17$\e(B ?\e$,17%\e(B ?\e$,17&\e(B ?\e$,17'\e(B ?\e$,17(\e(B nil ;; DENTALS
174 ?\e$,17*\e(B ?\e$,17+\e(B ?\e$,17,\e(B ?\e$,17-\e(B ?\e$,17.\e(B ;; LABIALS
175 ?\e$,17/\e(B ?\e$,17p\e(B nil ?\e$,172\e(B nil nil ?\e$,17q\e(B ;; SEMIVOWELS
176 ?\e$,176\e(B ?\e$,177\e(B ?\e$,178\e(B ?\e$,179\e(B ;; SIBILANTS
177 nil nil nil nil ?\e$,17\\e(B ?\e$,17]\e(B nil ?\e$,17_\e(B ;; NUKTAS
178 "\e$,16|7M6~\e(B" "\e$,16u7M77\e(B")
179 (;; Misc Symbols
180 ?\e$,16a\e(B ?\e$,16b\e(B ?\e$,16c\e(B nil ?\e$,17M\e(B nil nil)
181 (;; Digits
182 ?\e$,17f\e(B ?\e$,17g\e(B ?\e$,17h\e(B ?\e$,17i\e(B ?\e$,17j\e(B ?\e$,17k\e(B ?\e$,17l\e(B ?\e$,17m\e(B ?\e$,17n\e(B ?\e$,17o\e(B)
183 (;; Inscript-extra (4) (#, $, ^, *, ])
184 "\e$,17M7p\e(B" "\e$,17p7M\e(B" "\e$,17$7M7p\e(B" "\e$,1767M7p\e(B" "\e$,17<\e(B")))
186 (defvar indian-tlg-base-table
188 (;; VOWELS
189 (?\e$,1=E\e(B nil) (?\e$,1=F\e(B ?\e$,1=~\e(B) (?\e$,1=G\e(B ?\e$,1=\x7f\e(B) (?\e$,1=H\e(B ?\e$,1> \e(B) (?\e$,1=I\e(B ?\e$,1>!\e(B) (?\e$,1=J\e(B ?\e$,1>"\e(B)
190 (?\e$,1=K\e(B ?\e$,1>#\e(B) (?\e$,1=L\e(B nil) nil (?\e$,1=O\e(B ?\e$,1>'\e(B) (?\e$,1=N\e(B ?\e$,1>&\e(B) (?\e$,1=P\e(B ?\e$,1>(\e(B)
191 nil (?\e$,1=S\e(B ?\e$,1>+\e(B) (?\e$,1=R\e(B ?\e$,1>*\e(B) (?\e$,1=T\e(B ?\e$,1>,\e(B) (?\e$,1>@\e(B ?\e$,1>$\e(B) (?\e$,1>A\e(B nil))
192 (;; CONSONANTS
193 ?\e$,1=U\e(B ?\e$,1=V\e(B ?\e$,1=W\e(B ?\e$,1=X\e(B ?\e$,1=Y\e(B ;; GUTTRULS
194 ?\e$,1=Z\e(B ?\e$,1=[\e(B ?\e$,1=\\e(B ?\e$,1=]\e(B ?\e$,1=^\e(B ;; PALATALS
195 ?\e$,1=_\e(B ?\e$,1=`\e(B ?\e$,1=a\e(B ?\e$,1=b\e(B ?\e$,1=c\e(B ;; CEREBRALS
196 ?\e$,1=d\e(B ?\e$,1=e\e(B ?\e$,1=f\e(B ?\e$,1=g\e(B ?\e$,1=h\e(B nil ;; DENTALS
197 ?\e$,1=j\e(B ?\e$,1=k\e(B ?\e$,1=l\e(B ?\e$,1=m\e(B ?\e$,1=n\e(B ;; LABIALS
198 ?\e$,1=o\e(B ?\e$,1=p\e(B ?\e$,1=q\e(B ?\e$,1=r\e(B ?\e$,1=s\e(B nil ?\e$,1=u\e(B ;; SEMIVOWELS
199 ?\e$,1=v\e(B ?\e$,1=w\e(B ?\e$,1=x\e(B ?\e$,1=y\e(B ;; SIBILANTS
200 nil nil nil nil nil nil nil nil ;; NUKTAS
201 "\e$,1=\>-=^\e(B" "\e$,1=U>-=w\e(B")
202 (;; Misc Symbols
203 ?\e$,1=A\e(B ?\e$,1=B\e(B ?\e$,1=C\e(B nil ?\e$,1>-\e(B nil nil)
204 (;; Digits
205 ?\e$,1>F\e(B ?\e$,1>G\e(B ?\e$,1>H\e(B ?\e$,1>I\e(B ?\e$,1>J\e(B ?\e$,1>K\e(B ?\e$,1>L\e(B ?\e$,1>M\e(B ?\e$,1>N\e(B ?\e$,1>O\e(B)
206 (;; Inscript-extra (4) (#, $, ^, *, ])
207 "\e$,1>-=p\e(B" "\e$,1=p>-\e(B" "\e$,1=d>-=p\e(B" "\e$,1=v>-=p\e(B" nil)))
209 (defvar indian-knd-base-table
211 (;; VOWELS
212 (?\e$,1>e\e(B nil) (?\e$,1>f\e(B ?\e$,1?>\e(B) (?\e$,1>g\e(B ?\e$,1??\e(B) (?\e$,1>h\e(B ?\e$,1?@\e(B) (?\e$,1>i\e(B ?\e$,1?A\e(B) (?\e$,1>j\e(B ?\e$,1?B\e(B)
213 (?\e$,1>k\e(B ?\e$,1?C\e(B) (?\e$,1>l\e(B nil) nil (?\e$,1>o\e(B ?\e$,1?G\e(B) (?\e$,1>n\e(B ?\e$,1?F\e(B) (?\e$,1>p\e(B ?\e$,1?H\e(B)
214 nil (?\e$,1>s\e(B ?\e$,1?K\e(B) (?\e$,1>r\e(B ?\e$,1?J\e(B) (?\e$,1>t\e(B ?\e$,1?L\e(B) (?\e$,1?`\e(B ?\e$,1?D\e(B) (?\e$,1?a\e(B nil))
215 (;; CONSONANTS
216 ?\e$,1>u\e(B ?\e$,1>v\e(B ?\e$,1>w\e(B ?\e$,1>x\e(B ?\e$,1>y\e(B ;; GUTTRULS
217 ?\e$,1>z\e(B ?\e$,1>{\e(B ?\e$,1>|\e(B ?\e$,1>}\e(B ?\e$,1>~\e(B ;; PALATALS
218 ?\e$,1>\x7f\e(B ?\e$,1? \e(B ?\e$,1?!\e(B ?\e$,1?"\e(B ?\e$,1?#\e(B ;; CEREBRALS
219 ?\e$,1?$\e(B ?\e$,1?%\e(B ?\e$,1?&\e(B ?\e$,1?'\e(B ?\e$,1?(\e(B nil ;; DENTALS
220 ?\e$,1?*\e(B ?\e$,1?+\e(B ?\e$,1?,\e(B ?\e$,1?-\e(B ?\e$,1?.\e(B ;; LABIALS
221 ?\e$,1?/\e(B ?\e$,1?0\e(B ?\e$,1?1\e(B ?\e$,1?2\e(B ?\e$,1?3\e(B nil ?\e$,1?5\e(B ;; SEMIVOWELS
222 ?\e$,1?6\e(B ?\e$,1?7\e(B ?\e$,1?8\e(B ?\e$,1?9\e(B ;; SIBILANTS
223 nil nil nil nil nil nil ?\e$,1?^\e(B nil ;; NUKTAS
224 "\e$,1>|?M>~\e(B" "\e$,1>u?M?7\e(B")
225 (;; Misc Symbols
226 nil ?\e$,1>b\e(B ?\e$,1>c\e(B nil ?\e$,1?M\e(B nil nil)
227 (;; Digits
228 ?\e$,1?f\e(B ?\e$,1?g\e(B ?\e$,1?h\e(B ?\e$,1?i\e(B ?\e$,1?j\e(B ?\e$,1?k\e(B ?\e$,1?l\e(B ?\e$,1?m\e(B ?\e$,1?n\e(B ?\e$,1?o\e(B)
229 (;; Inscript-extra (4) (#, $, ^, *, ])
230 "\e$,1?M?0\e(B" "\e$,1?0?M\e(B" "\e$,1?$?M?0\e(B" "\e$,1?6?M?0\e(B" nil)))
232 (defvar indian-mlm-base-table
234 (;; VOWELS
235 (?\e$,1@%\e(B nil) (?\e$,1@&\e(B ?\e$,1@^\e(B) (?\e$,1@'\e(B ?\e$,1@_\e(B) (?\e$,1@(\e(B ?\e$,1@`\e(B) (?\e$,1@)\e(B ?\e$,1@a\e(B) (?\e$,1@*\e(B ?\e$,1@b\e(B)
236 (?\e$,1@+\e(B ?\e$,1@c\e(B) (?\e$,1@,\e(B nil) nil (?\e$,1@/\e(B ?\e$,1@g\e(B) (?\e$,1@.\e(B ?\e$,1@f\e(B) (?\e$,1@0\e(B ?\e$,1@h\e(B)
237 nil (?\e$,1@3\e(B ?\e$,1@k\e(B) (?\e$,1@2\e(B ?\e$,1@j\e(B) (?\e$,1@4\e(B ?\e$,1@l\e(B) nil nil)
238 (;; CONSONANTS
239 ?\e$,1@5\e(B ?\e$,1@6\e(B ?\e$,1@7\e(B ?\e$,1@8\e(B ?\e$,1@9\e(B ;; GUTTRULS
240 ?\e$,1@:\e(B ?\e$,1@;\e(B ?\e$,1@<\e(B ?\e$,1@=\e(B ?\e$,1@>\e(B ;; PALATALS
241 ?\e$,1@?\e(B ?\e$,1@@\e(B ?\e$,1@A\e(B ?\e$,1@B\e(B ?\e$,1@C\e(B ;; CEREBRALS
242 ?\e$,1@D\e(B ?\e$,1@E\e(B ?\e$,1@F\e(B ?\e$,1@G\e(B ?\e$,1@H\e(B nil ;; DENTALS
243 ?\e$,1@J\e(B ?\e$,1@K\e(B ?\e$,1@L\e(B ?\e$,1@M\e(B ?\e$,1@N\e(B ;; LABIALS
244 ?\e$,1@O\e(B ?\e$,1@P\e(B ?\e$,1@Q\e(B ?\e$,1@R\e(B ?\e$,1@S\e(B ?\e$,1@T\e(B ?\e$,1@U\e(B ;; SEMIVOWELS
245 ?\e$,1@V\e(B ?\e$,1@W\e(B ?\e$,1@X\e(B ?\e$,1@Y\e(B ;; SIBILANTS
246 nil nil nil nil nil nil nil nil ;; NUKTAS
247 "\e$,1@<@m@>\e(B" "\e$,1@5@m@W\e(B")
248 (;; Misc Symbols
249 nil ?\e$,1@"\e(B ?\e$,1@#\e(B nil ?\e$,1@m\e(B nil nil)
250 (;; Digits
251 ?\e$,1A&\e(B ?\e$,1A'\e(B ?\e$,1A(\e(B ?\e$,1A)\e(B ?\e$,1A*\e(B ?\e$,1A+\e(B ?\e$,1A,\e(B ?\e$,1A-\e(B ?\e$,1A.\e(B ?\e$,1A/\e(B)
252 (;; Inscript-extra (4) (#, $, ^, *, ])
253 "\e$,1@m@P\e(B" "\e$,1@P@m\e(B" "\e$,1@D@m@P\e(B" "\e$,1@V@m@P\e(B" nil)))
255 (defvar indian-tml-base-table
257 (;; VOWELS
258 (?\e$,1<%\e(B nil) (?\e$,1<&\e(B ?\e$,1<^\e(B) (?\e$,1<'\e(B ?\e$,1<_\e(B) (?\e$,1<(\e(B ?\e$,1<`\e(B) (?\e$,1<)\e(B ?\e$,1<a\e(B) (?\e$,1<*\e(B ?\e$,1<b\e(B)
259 nil nil nil (?\e$,1</\e(B ?\e$,1<g\e(B) (?\e$,1<.\e(B ?\e$,1<f\e(B) (?\e$,1<0\e(B ?\e$,1<h\e(B)
260 nil (?\e$,1<3\e(B ?\e$,1<k\e(B) (?\e$,1<2\e(B ?\e$,1<j\e(B) (?\e$,1<4\e(B ?\e$,1<l\e(B) nil nil)
261 (;; CONSONANTS
262 ?\e$,1<5\e(B nil nil nil ?\e$,1<9\e(B ;; GUTTRULS
263 ?\e$,1<:\e(B nil ?\e$,1<<\e(B nil ?\e$,1<>\e(B ;; PALATALS
264 ?\e$,1<?\e(B nil nil nil ?\e$,1<C\e(B ;; CEREBRALS
265 ?\e$,1<D\e(B nil nil nil ?\e$,1<H\e(B ?\e$,1<I\e(B ;; DENTALS
266 ?\e$,1<J\e(B nil nil nil ?\e$,1<N\e(B ;; LABIALS
267 ?\e$,1<O\e(B ?\e$,1<P\e(B ?\e$,1<Q\e(B ?\e$,1<R\e(B ?\e$,1<S\e(B ?\e$,1<T\e(B ?\e$,1<U\e(B ;; SEMIVOWELS
268 nil ?\e$,1<W\e(B ?\e$,1<X\e(B ?\e$,1<Y\e(B ;; SIBILANTS
269 nil nil nil nil nil nil nil nil ;; NUKTAS
270 "\e$,1<<<m<>\e(B" "\e$,1<5<m<W\e(B")
271 (;; Misc Symbols
272 nil ?\e$,1<"\e(B ?\e$,1<#\e(B nil ?\e$,1<m\e(B nil nil)
273 (;; Digits
274 nil ?\e$,1='\e(B ?\e$,1=(\e(B ?\e$,1=)\e(B ?\e$,1=*\e(B ?\e$,1=+\e(B ?\e$,1=,\e(B ?\e$,1=-\e(B ?\e$,1=.\e(B ?\e$,1=/\e(B)
275 (;; Inscript-extra (4) (#, $, ^, *, ])
276 "\e$,1<m<P\e(B" "\e$,1<P<m\e(B" "\e$,1<D<m<P\e(B" nil nil)))
278 (defvar indian-base-table-to-language-alist
279 '((indian-dev-base-table . "Devanagari")
280 (indian-pnj-base-table . "Punjabi")
281 (indian-ori-base-table . "Oriya")
282 (indian-bng-base-table . "Bengali")
283 (indian-asm-base-table . "Assamese")
284 (indian-tlg-base-table . "Telugu")
285 (indian-knd-base-table . "Kannada")
286 (indian-mlm-base-table . "Malayalam")
287 (indian-tml-base-table . "Tamil")))
289 (defvar indian-itrans-v5-table
290 '(;; for encode/decode
291 (;; vowels -- 18
292 "a" ("aa" "A") "i" ("ii" "I") "u" ("uu" "U")
293 ("RRi" "R^i") ("LLi" "L^i") (".c" "e.c") "E" "e" "ai"
294 "o.c" "O" "o" "au" ("RRI" "R^I") ("LLI" "L^I"))
295 (;; consonants -- 40
296 "k" "kh" "g" "gh" ("~N" "N^")
297 "ch" ("Ch" "chh") "j" "jh" ("~n" "JN")
298 "T" "Th" "D" "Dh" "N"
299 "t" "th" "d" "dh" "n" "nh"
300 "p" "ph" "b" "bh" "m"
301 "y" "r" "rh" "l" ("L" "ld") nil ("v" "w")
302 "sh" ("Sh" "shh") "s" "h"
303 "q" "K" "G" ("J" "z") ".D" ".Dh" "f" ("Y" "yh")
304 ("GY" "dny") "x")
305 (;; misc -- 7
306 ".N" (".n" "M") "H" ".a" ".h" ("AUM" "OM") "..")))
308 (defvar indian-kyoto-harvard-table
309 '(;; for encode/decode
310 (;; vowel
311 "a" ("A" "aa") "i" ("I" "ii") "u" ("U" "uu")
312 "R" ("L" "lR") nil nil "e" "ai"
313 nil nil "o" "au" ("q" "RR" "Q") ("E" "LL" "lRR"))
314 (;; consonant
315 "k" "kh" "g" "gh" "G"
316 "c" "ch" "j" "jh" "J"
317 "T" "Th" "D" "Dh" "N"
318 "t" "th" "d" "dh" "n" nil
319 "p" "ph" "b" "bh" "m"
320 "y" "r" nil "l" "L" nil "v"
321 ("z" "Z") "S" "s" "h"
322 nil nil nil nil nil nil nil nil
323 nil nil)
324 (;; misc
325 nil "M" "H" "'" nil "." nil)))
327 (defvar indian-harvard-table
328 '(;; for encode/decode
329 (;; vowel
330 "a" ("A" "aa") "i" ("I" "ii") "u" ("U" "uu")
331 "R" ("L" "lR") nil nil "e" "ai"
332 nil nil "o" "au" ("RR" "q" "Q") ("LL" "E" "lRR"))
333 (;; consonant
334 "k" "kh" "g" "gh" "G"
335 "c" "ch" "j" "jh" "J"
336 "T" "Th" "D" "Dh" "N"
337 "t" "th" "d" "dh" "n" nil
338 "p" "ph" "b" "bh" "m"
339 "y" "r" nil "l" "L" nil "v"
340 ("z" "Z") "S" "s" "h"
341 nil nil nil nil nil nil nil nil
342 nil nil)
343 (;; misc
344 nil "M" "H" "'" nil "." nil)))
346 (defvar indian-tokyo-table
347 '(;; for encode/decode
348 (;; vowel
349 "a" ("A" "aa") "i" ("I" "ii") "u" ("U" "uu")
350 "R" ("L" "lR") nil nil "e" "ai"
351 nil nil "o" "au" ("Q" "RR" "q") ("E" "LL" "lRR"))
352 (;; consonant
353 "k" "kh" "g" "gh" "G"
354 "c" "ch" "j" "jh" "J"
355 "T" "Th" "D" "Dh" "N"
356 "t" "th" "d" "dh" "n" nil
357 "p" "ph" "b" "bh" "m"
358 "y" "r" nil "l" "L" nil "v"
359 ("Z" "z") "S" "s" "h"
360 nil nil nil nil nil nil nil nil
361 nil nil)
362 (;; misc
363 nil "M" "H" "'" nil "." nil)))
365 (defvar indian-aiba-table
366 '(;; for encode/decode
367 (;; vowel
368 "a" "aa" "i" "ii" "u" "uu"
369 ".r" ".l" nil nil "e" "ai"
370 nil nil "o" "au" "~r" "~l")
371 (;; consonant
372 "k" "kh" "g" "gh" "^n"
373 "c" "ch" "j" "jh" "~n"
374 ".t" ".th" ".d" ".dh" ".n"
375 "t" "th" "d" "dh" "n" nil
376 "p" "ph" "b" "bh" "m"
377 "y" "r" nil "l" nil nil "v"
378 "^s" ".s" "s" "h"
379 nil nil nil nil nil nil nil nil
380 nil nil)
381 (;; misc
382 nil ".m" ".h" "'" nil "." nil)))
384 (defun combinatorial (head &rest tail)
385 (if tail
386 (apply 'append
387 (mapcar (lambda (y) (mapcar (lambda (x) (cons x y)) head))
388 (apply 'combinatorial tail)))
389 (mapcar 'list head)))
391 (defun indian--puthash-char (char trans-char hashtbls)
392 (let ((encode-hash (car hashtbls)) ;; char -> trans
393 (decode-hash (cdr hashtbls)) ;; trans -> char
395 ;; char -- nil / char / string (/ list of vowel & matra)
396 ;; trans-char -- nil / string / list of strings
397 (when (and char trans-char)
398 (if (stringp trans-char) (setq trans-char (list trans-char)))
399 (if (characterp char) (setq char (char-to-string char)))
400 (puthash char (car trans-char) encode-hash)
401 (dolist (trans trans-char)
402 (puthash trans char decode-hash)))))
404 (defun indian--map (f l1 l2)
405 (while l1
406 (funcall f (pop l1) (pop l2))))
408 (defun indian--puthash-v (v trans-v hashtbls)
409 (indian--map
410 (lambda (v trans-v)
411 (indian--puthash-char (car v) trans-v hashtbls))
412 v trans-v))
414 (defun indian--puthash-c (c trans-c halant hashtbls)
415 (indian--map
416 (lambda (c trans-c)
417 (if (characterp c) (setq c (char-to-string c)))
418 (indian--puthash-char (concat c halant) trans-c hashtbls))
419 c trans-c))
421 (defun indian--puthash-m (m trans-m hashtbls)
422 (indian--map
423 (lambda (m trans-m)
424 (indian--puthash-char m trans-m hashtbls))
425 m trans-m))
427 (defun indian--puthash-cv (c trans-c v trans-v hashtbls)
428 (indian--map
429 (lambda (c trans-c)
430 (indian--map
431 (lambda (v trans-v)
432 (when (and c trans-c v trans-v)
433 (if (characterp c) (setq c (char-to-string c)))
434 (setq v (if (characterp (cadr v)) (char-to-string (cadr v)) ""))
435 (if (stringp trans-c) (setq trans-c (list trans-c)))
436 (if (stringp trans-v) (setq trans-v (list trans-v)))
437 (indian--puthash-char
438 (concat c v)
439 (mapcar (lambda (x) (apply 'concat x))
440 (combinatorial trans-c trans-v))
441 hashtbls)))
442 v trans-v))
443 c trans-c))
445 (defun indian-make-hash (table trans-table)
446 "Indian Transliteration Hash for decode/encode"
447 (let* ((encode-hash (make-hash-table :test 'equal))
448 (decode-hash (make-hash-table :test 'equal))
449 (hashtbls (cons encode-hash decode-hash))
450 (vowels (elt table 0))
451 (consonants (elt table 1))
452 (misc (elt table 2))
453 (digits (elt table 3))
454 (halant (char-to-string (elt misc 4)))
455 (trans-vowels (elt trans-table 0))
456 (trans-consonants (elt trans-table 1))
457 (trans-misc (elt trans-table 2))
458 (trans-digits '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9")))
459 (indian--puthash-v vowels trans-vowels hashtbls)
460 (indian--puthash-c consonants trans-consonants halant hashtbls)
461 (indian--puthash-cv consonants trans-consonants
462 vowels trans-vowels hashtbls)
463 (indian--puthash-m misc trans-misc hashtbls)
464 (indian--puthash-m digits trans-digits hashtbls)
465 hashtbls))
467 (defvar indian-dev-itrans-v5-hash
468 (indian-make-hash indian-dev-base-table
469 indian-itrans-v5-table))
470 (defvar indian-dev-kyoto-harvard-hash
471 (indian-make-hash indian-dev-base-table
472 indian-kyoto-harvard-table))
473 (defvar indian-dev-aiba-hash
474 (indian-make-hash indian-dev-base-table
475 indian-aiba-table))
477 (defvar indian-pnj-itrans-v5-hash
478 (indian-make-hash indian-pnj-base-table
479 indian-itrans-v5-table))
481 (defvar indian-gjr-itrans-v5-hash
482 (indian-make-hash indian-gjr-base-table
483 indian-itrans-v5-table))
485 (defvar indian-ori-itrans-v5-hash
486 (indian-make-hash indian-ori-base-table
487 indian-itrans-v5-table))
489 (defvar indian-bng-itrans-v5-hash
490 (indian-make-hash indian-bng-base-table
491 indian-itrans-v5-table))
493 (defvar indian-asm-itrans-v5-hash
494 (indian-make-hash indian-asm-base-table
495 indian-itrans-v5-table))
497 (defvar indian-tlg-itrans-v5-hash
498 (indian-make-hash indian-tlg-base-table
499 indian-itrans-v5-table))
501 (defvar indian-knd-itrans-v5-hash
502 (indian-make-hash indian-knd-base-table
503 indian-itrans-v5-table))
505 (defvar indian-mlm-itrans-v5-hash
506 (indian-make-hash indian-mlm-base-table
507 indian-itrans-v5-table))
509 (defvar indian-tml-itrans-v5-hash
510 (indian-make-hash indian-tml-base-table
511 indian-itrans-v5-table))
514 (defmacro indian-translate-region (from to hashtable encode-p)
515 `(save-excursion
516 (save-restriction
517 (let ((regexp ,(indian-regexp-of-hashtbl-keys
518 (if encode-p (car (eval hashtable))
519 (cdr (eval hashtable))))))
520 (narrow-to-region from to)
521 (goto-char (point-min))
522 (while (re-search-forward regexp nil t)
523 (let ((matchstr (gethash (match-string 0)
524 (if ,encode-p
525 (car ,hashtable)
526 (cdr ,hashtable)))))
527 (if matchstr (replace-match matchstr))))))))
531 (defun indian-dev-itrans-v5-encode-region (from to)
532 (interactive "r")
533 (indian-translate-region
534 from to indian-dev-itrans-v5-hash t))
536 (defun indian-dev-itrans-v5-decode-region (from to)
537 (interactive "r")
538 (indian-translate-region
539 from to indian-dev-itrans-v5-hash nil))
541 (defun indian-dev-kyoto-harvard-encode-region (from to)
542 (interactive "r")
543 (indian-translate-region
544 from to indian-dev-kyoto-harvard-hash t))
546 (defun indian-dev-kyoto-harvard-decode-region (from to)
547 (interactive "r")
548 (indian-translate-region
549 from to indian-dev-kyoto-harvard-hash nil))
551 (defun indian-dev-aiba-encode-region (from to)
552 (interactive "r")
553 (indian-translate-region
554 from to indian-dev-aiba-hash t))
556 (defun indian-dev-aiba-decode-region (from to)
557 (interactive "r")
558 (indian-translate-region
559 from to indian-dev-aiba-hash nil))
564 ;;; IS 13194 utilities
566 ;; The followings provide conversion between IS 13194 (ISCII) and UCS.
568 (let
569 ;;Unicode vs IS13194 ;; only Devanagari is supported now.
570 ((ucs-devanagari-to-is13194-alist
571 '((?\x0900 . "[U+0900]")
572 (?\x0901 . "\e(5!\e(B")
573 (?\x0902 . "\e(5"\e(B")
574 (?\x0903 . "\e(5#\e(B")
575 (?\x0904 . "[U+0904]")
576 (?\x0905 . "\e(5$\e(B")
577 (?\x0906 . "\e(5%\e(B")
578 (?\x0907 . "\e(5&\e(B")
579 (?\x0908 . "\e(5'\e(B")
580 (?\x0909 . "\e(5(\e(B")
581 (?\x090a . "\e(5)\e(B")
582 (?\x090b . "\e(5*\e(B")
583 (?\x090c . "\e(5&i\e(B")
584 (?\x090d . "\e(5.\e(B")
585 (?\x090e . "\e(5+\e(B")
586 (?\x090f . "\e(5,\e(B")
587 (?\x0910 . "\e(5-\e(B")
588 (?\x0911 . "\e(52\e(B")
589 (?\x0912 . "\e(5/\e(B")
590 (?\x0913 . "\e(50\e(B")
591 (?\x0914 . "\e(51\e(B")
592 (?\x0915 . "\e(53\e(B")
593 (?\x0916 . "\e(54\e(B")
594 (?\x0917 . "\e(55\e(B")
595 (?\x0918 . "\e(56\e(B")
596 (?\x0919 . "\e(57\e(B")
597 (?\x091a . "\e(58\e(B")
598 (?\x091b . "\e(59\e(B")
599 (?\x091c . "\e(5:\e(B")
600 (?\x091d . "\e(5;\e(B")
601 (?\x091e . "\e(5<\e(B")
602 (?\x091f . "\e(5=\e(B")
603 (?\x0920 . "\e(5>\e(B")
604 (?\x0921 . "\e(5?\e(B")
605 (?\x0922 . "\e(5@\e(B")
606 (?\x0923 . "\e(5A\e(B")
607 (?\x0924 . "\e(5B\e(B")
608 (?\x0925 . "\e(5C\e(B")
609 (?\x0926 . "\e(5D\e(B")
610 (?\x0927 . "\e(5E\e(B")
611 (?\x0928 . "\e(5F\e(B")
612 (?\x0929 . "\e(5G\e(B")
613 (?\x092a . "\e(5H\e(B")
614 (?\x092b . "\e(5I\e(B")
615 (?\x092c . "\e(5J\e(B")
616 (?\x092d . "\e(5K\e(B")
617 (?\x092e . "\e(5L\e(B")
618 (?\x092f . "\e(5M\e(B")
619 (?\x0930 . "\e(5O\e(B")
620 (?\x0931 . "\e(5P\e(B")
621 (?\x0932 . "\e(5Q\e(B")
622 (?\x0933 . "\e(5R\e(B")
623 (?\x0934 . "\e(5S\e(B")
624 (?\x0935 . "\e(5T\e(B")
625 (?\x0936 . "\e(5U\e(B")
626 (?\x0937 . "\e(5V\e(B")
627 (?\x0938 . "\e(5W\e(B")
628 (?\x0939 . "\e(5X\e(B")
629 (?\x093a . "[U+093a]")
630 (?\x093b . "[U+093b]")
631 (?\x093c . "\e(5i\e(B")
632 (?\x093d . "\e(5ji\e(B")
633 (?\x093e . "\e(5Z\e(B")
634 (?\x093f . "\e(5[\e(B")
635 (?\x0940 . "\e(5\\e(B")
636 (?\x0941 . "\e(5]\e(B")
637 (?\x0942 . "\e(5^\e(B")
638 (?\x0943 . "\e(5_\e(B")
639 (?\x0944 . "\e(5_i\e(B")
640 (?\x0945 . "\e(5c\e(B")
641 (?\x0946 . "\e(5`\e(B")
642 (?\x0947 . "\e(5a\e(B")
643 (?\x0948 . "\e(5b\e(B")
644 (?\x0949 . "\e(5g\e(B")
645 (?\x094a . "\e(5d\e(B")
646 (?\x094b . "\e(5e\e(B")
647 (?\x094c . "\e(5f\e(B")
648 (?\x094d . "\e(5h\e(B")
649 (?\x094e . "[U+094e]")
650 (?\x094f . "[U+094f]")
651 (?\x0950 . "\e(5!i\e(B")
652 (?\x0951 . "\e(5p5\e(B")
653 (?\x0952 . "\e(5p8\e(B")
654 (?\x0953 . "[DEVANAGARI GRAVE ACCENT]")
655 (?\x0954 . "[DEVANAGARI ACUTE ACCENT]")
656 (?\x0955 . "[U+0955]")
657 (?\x0956 . "[U+0956]")
658 (?\x0957 . "[U+0957]")
659 (?\x0958 . "\e(53i\e(B")
660 (?\x0959 . "\e(54i\e(B")
661 (?\x095a . "\e(55i\e(B")
662 (?\x095b . "\e(5:i\e(B")
663 (?\x095c . "\e(5?i\e(B")
664 (?\x095d . "\e(5@i\e(B")
665 (?\x095e . "\e(5Ii\e(B")
666 (?\x095f . "\e(5N\e(B")
667 (?\x0960 . "\e(5*i\e(B")
668 (?\x0961 . "\e(5'i\e(B")
669 (?\x0962 . "\e(5[i\e(B")
670 (?\x0963 . "\e(5ei\e(B")
671 (?\x0964 . "\e(5j\e(B")
672 (?\x0965 . "\e(5jj\e(B")
673 (?\x0966 . "\e(5q\e(B")
674 (?\x0967 . "\e(5r\e(B")
675 (?\x0968 . "\e(5s\e(B")
676 (?\x0969 . "\e(5t\e(B")
677 (?\x096a . "\e(5u\e(B")
678 (?\x096b . "\e(5v\e(B")
679 (?\x096c . "\e(5w\e(B")
680 (?\x096d . "\e(5x\e(B")
681 (?\x096e . "\e(5y\e(B")
682 (?\x096f . "\e(5z\e(B")
683 (?\x0970 . "[U+0970]")
684 (?\x0971 . "[U+0971]")
685 (?\x0972 . "[U+0972]")
686 (?\x0973 . "[U+0973]")
687 (?\x0974 . "[U+0974]")
688 (?\x0975 . "[U+0975]")
689 (?\x0976 . "[U+0976]")
690 (?\x0977 . "[U+0977]")
691 (?\x0978 . "[U+0978]")
692 (?\x0979 . "[U+0979]")
693 (?\x097a . "[U+097a]")
694 (?\x097b . "[U+097b]")
695 (?\x097c . "[U+097c]")
696 (?\x097d . "[U+097d]")
697 (?\x097e . "[U+097e]")
698 (?\x097f . "[U+097f]")))
699 (ucs-bengali-to-is13194-alist nil)
700 (ucs-assamese-to-is13194-alist nil)
701 (ucs-gurmukhi-to-is13194-alist nil)
702 (ucs-gujarati-to-is13194-alist nil)
703 (ucs-oriya-to-is13194-alist nil)
704 (ucs-tamil-to-is13194-alist nil)
705 (ucs-telugu-to-is13194-alist nil)
706 (ucs-malayalam-to-is13194-alist nil)
707 (ucs-kannada-to-is13194-alist nil))
708 (dolist (script '(devanagari bengali assamese gurmukhi gujarati
709 oriya tamil telugu malayalam kannada))
710 (let ((hashtable (intern (concat "is13194-to-ucs-"
711 (symbol-name script) "-hashtbl" )))
712 (regexp (intern (concat "is13194-to-ucs-"
713 (symbol-name script) "-regexp"))))
714 (set hashtable (make-hash-table :test 'equal :size 128))
715 (dolist (x (eval (intern (concat "ucs-" (symbol-name script)
716 "-to-is13194-alist"))))
717 (put-char-code-property (car x) 'script script)
718 (put-char-code-property (car x) 'iscii (cdr x))
719 (puthash (cdr x) (char-to-string (car x)) (eval hashtable)))
720 (set regexp (indian-regexp-of-hashtbl-keys (eval hashtable))))))
722 (defvar is13194-default-repertory 'devanagari)
724 (defvar is13194-repertory-to-ucs-script
725 `((DEF ?\x40 ,is13194-default-repertory)
726 (RMN ?\x41 ,is13194-default-repertory)
727 (DEV ?\x42 devanagari)
728 (BNG ?\x43 bengali)
729 (TML ?\x44 tamil)
730 (TLG ?\x45 telugu)
731 (ASM ?\x46 bengali)
732 (ORI ?\x47 oriya)
733 (KND ?\x48 kannada)
734 (MLM ?\x49 malayalam)
735 (GJR ?\x4a gujarati)
736 (PNJ ?\x4b gurmukhi)))
738 ;; for guiding find-variable function.
739 (defvar is13194-to-ucs-devanagari-hashtbl nil)
740 (defvar is13194-to-ucs-devanagari-regexp nil)
741 (defvar is13194-to-ucs-bengali-hashtbl nil)
742 (defvar is13194-to-ucs-bengali-regexp nil)
743 (defvar is13194-to-ucs-assamese-hashtbl nil)
744 (defvar is13194-to-ucs-assamese-regexp nil)
745 (defvar is13194-to-ucs-gurmukhi-hashtbl nil)
746 (defvar is13194-to-ucs-gurmukhi-regexp nil)
747 (defvar is13194-to-ucs-gujarati-hashtbl nil)
748 (defvar is13194-to-ucs-gujarati-regexp nil)
749 (defvar is13194-to-ucs-oriya-hashtbl nil)
750 (defvar is13194-to-ucs-oriya-regexp nil)
751 (defvar is13194-to-ucs-tamil-hashtbl nil)
752 (defvar is13194-to-ucs-tamil-regexp nil)
753 (defvar is13194-to-ucs-telugu-hashtbl nil)
754 (defvar is13194-to-ucs-telugu-regexp nil)
755 (defvar is13194-to-ucs-malayalam-hashtbl nil)
756 (defvar is13194-to-ucs-malayalam-regexp nil)
757 (defvar is13194-to-ucs-kannada-hashtbl nil)
758 (defvar is13194-to-ucs-kannada-regexp nil)
760 (defvar ucs-to-is13194-regexp
761 ;; only Devanagari is supported now.
762 (concat "[" (char-to-string #x0900)
763 "-" (char-to-string #x097f) "]")
764 "Regexp that matches to conversion")
766 (defun ucs-to-iscii-region (from to)
767 "Converts the indian UCS characters in the region to ISCII.
768 Returns new end position."
769 (interactive "r")
770 ;; only Devanagari is supported now.
771 (save-excursion
772 (save-restriction
773 (narrow-to-region from to)
774 (goto-char (point-min))
775 (let* ((current-repertory is13194-default-repertory))
776 (while (re-search-forward ucs-to-is13194-regexp nil t)
777 (replace-match
778 (get-char-code-property (string-to-char (match-string 0))
779 'iscii))))
780 (point-max))))
782 (defun iscii-to-ucs-region (from to)
783 "Converts the ISCII characters in the region to UCS.
784 Returns new end position."
785 (interactive "r")
786 ;; only Devanagari is supported now.
787 (save-excursion
788 (save-restriction
789 (narrow-to-region from to)
790 (goto-char (point-min))
791 (let* ((current-repertory is13194-default-repertory)
792 (current-hashtable
793 (intern (concat "is13194-to-ucs-"
794 (symbol-name current-repertory) "-hashtbl")))
795 (current-regexp
796 (intern (concat "is13194-to-ucs-"
797 (symbol-name current-repertory) "-regexp")))
798 (re (eval current-regexp))
799 (hash (eval current-hashtable)))
800 (while (re-search-forward re nil t)
801 (replace-match (gethash (match-string 0) hash ""))))
802 (point-max))))
804 ;;;###autoload
805 (defun indian-compose-region (from to)
806 "Compose the region according to `composition-function-table'."
807 (interactive "r")
808 (save-excursion
809 (save-restriction
810 (let ((pos from) newpos func (max to))
811 (narrow-to-region from to)
812 (while (< pos max)
813 (setq func (aref composition-function-table (char-after pos)))
814 (if (fboundp func)
815 (setq newpos (funcall func pos nil)
816 pos (if (and (integerp newpos) (> newpos pos))
817 newpos (1+ pos)))
818 (setq pos (1+ pos))))))))
820 ;;;###autoload
821 (defun indian-compose-string (string)
822 (with-temp-buffer
823 (insert string)
824 (indian-compose-region (point-min) (point-max))
825 (buffer-string)))
827 ;;;###autoload
828 (defun in-is13194-post-read-conversion (len)
829 (let ((pos (point)) endpos)
830 (setq endpos (iscii-to-ucs-region pos (+ pos len)))
831 (- endpos pos)))
833 ;;;###autoload
834 (defun in-is13194-pre-write-conversion (from to)
835 (let ((buf (current-buffer)))
836 (set-buffer (generate-new-buffer " *temp*"))
837 (if (stringp from)
838 (insert from)
839 (insert-buffer-substring buf from to))
840 (ucs-to-iscii-region (point-min) (point-max))
841 nil))
846 ;;; Backward Compatibility support programs
848 ;; The following provides the conversion from old-implementation of
849 ;; Emacs Devanagari script to UCS.
851 (defconst indian-2-colum-to-ucs
853 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
854 ;;2120 \e$(6!!!"!#!$!%!&!'!(!)!*!+!,!-!.!/\e(B
855 ("\e$(6!!\e(B" . "\e$,15A\e(B")
856 ("\e$(6!"\e(B" . "\e$,15B\e(B")
857 ("\e$(6!#\e(B" . "\e$,15C\e(B")
858 ("\e$(6!$\e(B" . "\e$,15E\e(B")
859 ("\e$(6!%\e(B" . "\e$,15F\e(B")
860 ("\e$(6!&\e(B" . "\e$,15G\e(B")
861 ("\e$(6!'\e(B" . "\e$,15H\e(B")
862 ("\e$(6!(\e(B" . "\e$,15I\e(B")
863 ("\e$(6!)\e(B" . "\e$,15J\e(B")
864 ("\e$(6!*\e(B" . "\e$,15K\e(B")
865 ("\e$(6!*"p\e(B" . "\e$,15p6#\e(B")
866 ("\e$(6!+\e(B" . "\e$,15N\e(B")
867 ("\e$(6!,\e(B" . "\e$,15O\e(B")
868 ("\e$(6!-\e(B" . "\e$,15P\e(B")
869 ("\e$(6!.\e(B" . "\e$,15M\e(B")
870 ("\e$(6!/\e(B" . "\e$,15R\e(B")
871 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
872 ;;2130 \e$(6!0!1!2!3!4!5!6!7!8!9!:!;!<!=!>!?\e(B
873 ("\e$(6!0\e(B" . "\e$,15S\e(B")
874 ("\e$(6!1\e(B" . "\e$,15T\e(B")
875 ("\e$(6!2\e(B" . "\e$,15Q\e(B")
876 ("\e$(6!3\e(B" . "\e$,15U\e(B")
877 ("\e$(6!4\e(B" . "\e$,15V\e(B")
878 ("\e$(6!5\e(B" . "\e$,15W\e(B")
879 ("\e$(6!6\e(B" . "\e$,15X\e(B")
880 ("\e$(6!7\e(B" . "\e$,15Y\e(B")
881 ("\e$(6!8\e(B" . "\e$,15Z\e(B")
882 ("\e$(6!9\e(B" . "\e$,15[\e(B")
883 ("\e$(6!:\e(B" . "\e$,15\\e(B")
884 ("\e$(6!;\e(B" . "\e$,15]\e(B")
885 ("\e$(6!<\e(B" . "\e$,15^\e(B")
886 ("\e$(6!=\e(B" . "\e$,15_\e(B")
887 ("\e$(6!>\e(B" . "\e$,15`\e(B")
888 ("\e$(6!?\e(B" . "\e$,15a\e(B")
889 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
890 ;;2140 \e$(6!@!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O\e(B
891 ("\e$(6!@\e(B" . "\e$,15b\e(B")
892 ("\e$(6!A\e(B" . "\e$,15c\e(B")
893 ("\e$(6!B\e(B" . "\e$,15d\e(B")
894 ("\e$(6!C\e(B" . "\e$,15e\e(B")
895 ("\e$(6!D\e(B" . "\e$,15f\e(B")
896 ("\e$(6!E\e(B" . "\e$,15g\e(B")
897 ("\e$(6!F\e(B" . "\e$,15h\e(B")
898 ("\e$(6!G\e(B" . "\e$,15i\e(B")
899 ("\e$(6!H\e(B" . "\e$,15j\e(B")
900 ("\e$(6!I\e(B" . "\e$,15k\e(B")
901 ("\e$(6!J\e(B" . "\e$,15l\e(B")
902 ("\e$(6!K\e(B" . "\e$,15m\e(B")
903 ("\e$(6!L\e(B" . "\e$,15n\e(B")
904 ("\e$(6!M\e(B" . "\e$,15o\e(B")
905 ("\e$(6!N\e(B" . "\e$,16?\e(B")
906 ("\e$(6!O\e(B" . "\e$,15p\e(B")
907 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
908 ;;2150 \e$(6!P!Q!R!S!T!U!V!W!X!Y!Z![!\!]!^!_\e(B
909 ("\e$(6!P\e(B" . "\e$,15q\e(B")
910 ("\e$(6!Q\e(B" . "\e$,15r\e(B")
911 ("\e$(6!R\e(B" . "\e$,15s\e(B")
912 ("\e$(6!S\e(B" . "\e$,15t\e(B")
913 ("\e$(6!T\e(B" . "\e$,15u\e(B")
914 ("\e$(6!U\e(B" . "\e$,15v\e(B")
915 ("\e$(6!V\e(B" . "\e$,15w\e(B")
916 ("\e$(6!W\e(B" . "\e$,15x\e(B")
917 ("\e$(6!X\e(B" . "\e$,15y\e(B")
918 ("\e$(6!Z\e(B" . "\e$,15~\e(B")
919 ("\e$(6![\e(B" . "\e$,15\x7f\e(B")
920 ("\e$(6!\\e(B" . "\e$,16 \e(B")
921 ("\e$(6!]\e(B" . "\e$,16!\e(B")
922 ("\e$(6!^\e(B" . "\e$,16"\e(B")
923 ("\e$(6!_\e(B" . "\e$,16#\e(B")
924 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
925 ;;2160 \e$(6!`!a!b!c!d!e!f!g!h!i!j!k!l!m!n!o\e(B
926 ("\e$(6!`\e(B" . "\e$,16&\e(B")
927 ("\e$(6!a\e(B" . "\e$,16'\e(B")
928 ("\e$(6!b\e(B" . "\e$,16(\e(B")
929 ("\e$(6!c\e(B" . "\e$,16%\e(B")
930 ("\e$(6!d\e(B" . "\e$,16*\e(B")
931 ("\e$(6!e\e(B" . "\e$,16+\e(B")
932 ("\e$(6!f\e(B" . "\e$,16,\e(B")
933 ("\e$(6!g\e(B" . "\e$,16)\e(B")
934 ("\e$(6!h\e(B" . "\e$,16-\e(B")
935 ("\e$(6!i\e(B" . "\e$,15|\e(B")
936 ("\e$(6!j\e(B" . "\e$,16D\e(B")
937 ("\e$(6!j!j\e(B" . "\e$,16E\e(B")
938 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
939 ;;2170 \e$(6!p!q!r!s!t!u!v!w!x!y!z!{!|!}!~\e(B
940 ("\e$(6!q\e(B" . "\e$,16F\e(B")
941 ("\e$(6!r\e(B" . "\e$,16G\e(B")
942 ("\e$(6!s\e(B" . "\e$,16H\e(B")
943 ("\e$(6!t\e(B" . "\e$,16I\e(B")
944 ("\e$(6!u\e(B" . "\e$,16J\e(B")
945 ("\e$(6!v\e(B" . "\e$,16K\e(B")
946 ("\e$(6!w\e(B" . "\e$,16L\e(B")
947 ("\e$(6!x\e(B" . "\e$,16M\e(B")
948 ("\e$(6!y\e(B" . "\e$,16N\e(B")
949 ("\e$(6!z\e(B" . "\e$,16O\e(B")
950 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
951 ;;2220 \e$(6"!"""#"$"%"&"'"(")"*"+","-"."/\e(B
952 ("\e$(6"!\e(B" . "\e$,16;6-5p\e(B")
953 ("\e$(6""\e(B" . "\e$,16>6-5p\e(B")
954 ("\e$(6"#\e(B" . "\e$,15U6-5p\e(B")
955 ("\e$(6"$\e(B" . "\e$,15W6-5p\e(B")
956 ("\e$(6"%\e(B" . "\e$,15d6-5p\e(B")
957 ("\e$(6"&\e(B" . "\e$,15j6-5p\e(B")
958 ("\e$(6"'\e(B" . "\e$,15k6-5p\e(B")
959 ("\e$(6")\e(B" . "\e$,15v6-5p\e(B")
960 ("\e$(6",\e(B" . "\e$,15p6!\e(B")
961 ("\e$(6"-\e(B" . "\e$,15p6"\e(B")
962 ("\e$(6".\e(B" . "\e$,15q6!\e(B")
963 ("\e$(6"/\e(B" . "\e$,15q6"\e(B")
964 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
965 ;;2230 \e$(6"0"1"2"3"4"5"6"7"8"9":";"<"=">"?\e(B
966 ("\e$(6"3\e(B" . "\e$,15U6-\e(B")
967 ("\e$(6"4\e(B" . "\e$,15V6-\e(B")
968 ("\e$(6"5\e(B" . "\e$,15W6-\e(B")
969 ("\e$(6"6\e(B" . "\e$,15X6-\e(B")
970 ("\e$(6"8\e(B" . "\e$,15Z6-\e(B")
971 ("\e$(6"8"q\e(B" . "\e$,15Z6-5p6-\e(B")
972 ("\e$(6":\e(B" . "\e$,15\6-\e(B")
973 ("\e$(6";\e(B" . "\e$,15]6-\e(B")
974 ("\e$(6"<\e(B" . "\e$,15^6-\e(B")
975 ("\e$(6"<\e(B" . "\e$,15^6-\e(B")
976 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
977 ;;2240 \e$(6"@"A"B"C"D"E"F"G"H"I"J"K"L"M"N"O\e(B
978 ("\e$(6"A\e(B" . "\e$,15c6-\e(B")
979 ("\e$(6"B\e(B" . "\e$,15d6-\e(B")
980 ("\e$(6"C\e(B" . "\e$,15e6-\e(B")
981 ("\e$(6"E\e(B" . "\e$,15g6-\e(B")
982 ("\e$(6"F\e(B" . "\e$,15h6-\e(B")
983 ("\e$(6"G\e(B" . "\e$,15i6-\e(B")
984 ("\e$(6"H\e(B" . "\e$,15j6-\e(B")
985 ("\e$(6"I\e(B" . "\e$,15k6-\e(B")
986 ("\e$(6"J\e(B" . "\e$,15l6-\e(B")
987 ("\e$(6"J\e(B" . "\e$,15l6-\e(B")
988 ("\e$(6"K\e(B" . "\e$,15m6-\e(B")
989 ("\e$(6"L\e(B" . "\e$,15n6-\e(B")
990 ("\e$(6"M\e(B" . "\e$,15o6-\e(B")
991 ("\e$(6"N\e(B" . "\e$,16?6-\e(B")
992 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
993 ;;2250 \e$(6"P"Q"R"S"T"U"V"W"X"Y"Z"["\"]"^"_\e(B
994 ("\e$(6"Q\e(B" . "\e$,15r6-\e(B")
995 ("\e$(6"R\e(B" . "\e$,15s6-\e(B")
996 ("\e$(6"S\e(B" . "\e$,15t6-\e(B")
997 ("\e$(6"T\e(B" . "\e$,15u6-\e(B")
998 ("\e$(6"U\e(B" . "\e$,15v6-\e(B")
999 ("\e$(6"V\e(B" . "\e$,15w6-\e(B")
1000 ("\e$(6"W\e(B" . "\e$,15x6-\e(B")
1001 ("\e$(6"]\e(B" . "\e$,16-5o\e(B")
1002 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1003 ;;2260 \e$(6"`"a"b"c"d"e"f"g"h"i"j"k"l"m"n"o\e(B
1004 ("\e$(6"`\e(B" . "\e$,15W6-5p6-\e(B")
1005 ("\e$(6"a\e(B" . "\e$,15X6-5h6-\e(B")
1006 ("\e$(6"c\e(B" . "\e$,15d6-5d6-\e(B")
1007 ("\e$(6"d\e(B" . "\e$,15d6-5p6-\e(B")
1008 ("\e$(6"e\e(B" . "\e$,15g6-5h6-\e(B")
1009 ("\e$(6"f\e(B" . "\e$,15g6-5p6-\e(B")
1010 ("\e$(6"g\e(B" . "\e$,15j6-5d6-\e(B")
1011 ("\e$(6"h\e(B" . "\e$,15v6-5Z6-\e(B")
1012 ("\e$(6"i\e(B" . "\e$,15v6-5p6-\e(B")
1013 ("\e$(6"j\e(B" . "\e$,15v6-5u6-\e(B")
1014 ("\e$(6"k\e(B" . "\e$,15h6-5h6-\e(B")
1015 ("\e$(6"l\e(B" . "\e$,15U6-5w6-\e(B")
1016 ("\e$(6"m\e(B" . "\e$,15\6-5^6-\e(B")
1017 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1018 ;;2270 \e$(6"p"q"r"s"t"u"v"w"x"y"z"{"|"}"~\e(B
1019 ("\e$(6"p\e(B" . "\e$,15p6-\e(B")
1020 ("\e$(6"q\e(B" . "\e$,16-5p\e(B")
1021 ("\e$(6"r\e(B" . "\e$,16-5p\e(B")
1022 ("\e$(6"s\e(B" . "\e$,1686-\e(B")
1023 ("\e$(6"t\e(B" . "\e$,1696-\e(B")
1024 ("\e$(6"u\e(B" . "\e$,16:6-\e(B")
1025 ("\e$(6"y\e(B" . "\e$,16>6-\e(B")
1026 ("\e$(6"z\e(B" . "\e$,16;6-\e(B")
1027 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1028 ;;2320 \e$(6#!#"###$#%#&#'#(#)#*#+#,#-#.#/\e(B
1029 ("\e$(6#!\e(B" . "\e$,160\e(B")
1030 ("\e$(6#&\e(B" . "\e$,15L\e(B")
1031 ("\e$(6#&"p\e(B" . "\e$,15p6$\e(B")
1032 ("\e$(6#'\e(B" . "\e$,16A\e(B")
1033 ("\e$(6#'"p\e(B" . "\e$,15p6C\e(B")
1034 ("\e$(6#*\e(B" . "\e$,16@\e(B")
1035 ("\e$(6#*"p\e(B" . "\e$,15p6B\e(B")
1036 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1037 ;;2330 \e$(6#0#1#2#3#4#5#6#7#8#9#:#;#<#=#>#?\e(B
1038 ("\e$(6#3\e(B" . "\e$,168\e(B")
1039 ("\e$(6#4\e(B" . "\e$,169\e(B")
1040 ("\e$(6#5\e(B" . "\e$,16:\e(B")
1041 ("\e$(6#:\e(B" . "\e$,16;\e(B")
1042 ("\e$(6#?\e(B" . "\e$,16<\e(B")
1043 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1044 ;;2340 \e$(6#@#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O\e(B
1045 ("\e$(6#@\e(B" . "\e$,16=\e(B")
1046 ("\e$(6#I\e(B" . "\e$,16>\e(B")
1047 ("\e$(6#J\e(B" . "\e$,15}\e(B")
1048 ("\e$(6#K\e(B" . "\e$,16$\e(B")
1049 ("\e$(6#L\e(B" . "\e$,16B\e(B")
1050 ("\e$(6#M\e(B" . "\e$,16C\e(B")
1051 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1052 ;;2350 \e$(6#P#Q#R#S#T#U#V#W#X#Y#Z#[#\#]#^#_\e(B
1053 ("\e$(6#P\e(B" . "\e$,15n6-5h\e(B")
1054 ("\e$(6#Q\e(B" . "\e$,15n6-5r\e(B")
1055 ("\e$(6#R\e(B" . "\e$,15y6#\e(B")
1056 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1057 ;;2360 \e$(6#`#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o\e(B
1058 ("\e$(6#`\e(B" . "\e$,15r6-5r\e(B")
1059 ("\e$(6#a\e(B" . "\e$,15u6-5h\e(B")
1060 ("\e$(6#b\e(B" . "\e$,15u6-5u\e(B")
1061 ("\e$(6#c\e(B" . "\e$,15v6-5Z\e(B")
1062 ("\e$(6#d\e(B" . "\e$,15v6-5h\e(B")
1063 ("\e$(6#e\e(B" . "\e$,15v6-5l\e(B")
1064 ("\e$(6#f\e(B" . "\e$,15v6-5r\e(B")
1065 ("\e$(6#g\e(B" . "\e$,15v6-5u\e(B")
1066 ("\e$(6#h\e(B" . "\e$,15w6-5_6-5p6-5o\e(B")
1067 ("\e$(6#i\e(B" . "\e$,15w6-5_6-5o\e(B")
1068 ("\e$(6#j\e(B" . "\e$,15w6-5_6-5u\e(B")
1069 ("\e$(6#k\e(B" . "\e$,15w6-5_\e(B")
1070 ("\e$(6#l\e(B" . "\e$,15w6-5`\e(B")
1071 ("\e$(6#m\e(B" . "\e$,15x6-5h\e(B")
1072 ("\e$(6#n\e(B" . "\e$,15x6-5p\e(B")
1073 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1074 ;;2370 \e$(6#p#q#r#s#t#u#v#w#x#y#z#{#|#}#~\e(B
1075 ("\e$(6#p\e(B" . "\e$,15y6-5c\e(B")
1076 ("\e$(6#q\e(B" . "\e$,15y6-5h\e(B")
1077 ("\e$(6#r\e(B" . "\e$,15y6-5n\e(B")
1078 ("\e$(6#s\e(B" . "\e$,15y6-5o\e(B")
1079 ("\e$(6#t\e(B" . "\e$,15y6-5p\e(B")
1080 ("\e$(6#u\e(B" . "\e$,15y6-5r\e(B")
1081 ("\e$(6#v\e(B" . "\e$,15y6-5u\e(B")
1082 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1083 ;;2420 \e$(6$!$"$#$$$%$&$'$($)$*$+$,$-$.$/\e(B
1084 ("\e$(6$!\e(B" . "\e$,15U6-5d6-5p6-5o\e(B")
1085 ("\e$(6$"\e(B" . "\e$,15U6-5d6-5u\e(B")
1086 ("\e$(6$#\e(B" . "\e$,15U6-5d6-5o\e(B")
1087 ("\e$(6$$\e(B" . "\e$,15U6-5h6-5o\e(B")
1088 ("\e$(6$%\e(B" . "\e$,15U6-5p6-5o\e(B")
1089 ("\e$(6$&\e(B" . "\e$,15U6-5u6-5o\e(B")
1090 ("\e$(6$'\e(B" . "\e$,15U6-5U\e(B")
1091 ("\e$(6$(\e(B" . "\e$,15U6-5d\e(B")
1092 ("\e$(6$)\e(B" . "\e$,15U6-5h\e(B")
1093 ("\e$(6$*\e(B" . "\e$,15U6-5n\e(B")
1094 ("\e$(6$+\e(B" . "\e$,15U6-5o\e(B")
1095 ("\e$(6$,\e(B" . "\e$,15U6-5r\e(B")
1096 ("\e$(6$-\e(B" . "\e$,15U6-5u\e(B")
1097 ("\e$(6$.\e(B" . "\e$,15U6-5w\e(B")
1098 ("\e$(6$/\e(B" . "\e$,15X6-5h\e(B")
1099 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1100 ;;2430 \e$(6$0$1$2$3$4$5$6$7$8$9$:$;$<$=$>$?\e(B
1101 ("\e$(6$0\e(B" . "\e$,15Y6-5U6-5d6-5o\e(B")
1102 ("\e$(6$1\e(B" . "\e$,15Y6-5U6-5w6-5u\e(B")
1103 ("\e$(6$2\e(B" . "\e$,15Y6-5U6-5d\e(B")
1104 ("\e$(6$3\e(B" . "\e$,15Y6-5U6-5w\e(B")
1105 ("\e$(6$4\e(B" . "\e$,15Y6-5X6-5p\e(B")
1106 ("\e$(6$5\e(B" . "\e$,15Y6-5U6-5o\e(B")
1107 ("\e$(6$6\e(B" . "\e$,15Y6-5V6-5o\e(B")
1108 ("\e$(6$7\e(B" . "\e$,15Y6-5W6-5o\e(B")
1109 ("\e$(6$8\e(B" . "\e$,15Y6-5X6-5o\e(B")
1110 ("\e$(6$9\e(B" . "\e$,15Y6-5U\e(B")
1111 ("\e$(6$:\e(B" . "\e$,15Y6-5V\e(B")
1112 ("\e$(6$;\e(B" . "\e$,15Y6-5W\e(B")
1113 ("\e$(6$<\e(B" . "\e$,15Y6-5X\e(B")
1114 ("\e$(6$=\e(B" . "\e$,15Y6-5Y\e(B")
1115 ("\e$(6$>\e(B" . "\e$,15Y6-5h\e(B")
1116 ("\e$(6$?\e(B" . "\e$,15Y6-5n\e(B")
1117 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1118 ;;2440 \e$(6$@$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O\e(B
1119 ("\e$(6$@\e(B" . "\e$,15Y6-5o\e(B")
1120 ("\e$(6$A\e(B" . "\e$,15Z6-5Z\e(B")
1121 ("\e$(6$B\e(B" . "\e$,15Z6-5^\e(B")
1122 ("\e$(6$C\e(B" . "\e$,15[6-5o\e(B")
1123 ("\e$(6$D\e(B" . "\e$,15\6-5p\e(B")
1124 ("\e$(6$E\e(B" . "\e$,15\6-5^\e(B")
1125 ("\e$(6$F\e(B" . "\e$,15^6-5Z\e(B")
1126 ("\e$(6$G\e(B" . "\e$,15^6-5\\e(B")
1127 ("\e$(6$H\e(B" . "\e$,15_6-5U\e(B")
1128 ("\e$(6$I\e(B" . "\e$,15_6-5_\e(B")
1129 ("\e$(6$J\e(B" . "\e$,15_6-5`\e(B")
1130 ("\e$(6$K\e(B" . "\e$,15_6-5o\e(B")
1131 ("\e$(6$L\e(B" . "\e$,15`6-5o\e(B")
1132 ("\e$(6$M\e(B" . "\e$,15a6-5W6-5o\e(B")
1133 ("\e$(6$N\e(B" . "\e$,15a6-5X6-5p\e(B")
1134 ("\e$(6$O\e(B" . "\e$,15a6-5p6-5o\e(B")
1135 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1136 ;;2450 \e$(6$P$Q$R$S$T$U$V$W$X$Y$Z$[$\$]$^$_\e(B
1137 ("\e$(6$P\e(B" . "\e$,15a6-5W\e(B")
1138 ("\e$(6$Q\e(B" . "\e$,15a6-5X\e(B")
1139 ("\e$(6$R\e(B" . "\e$,15a6-5a\e(B")
1140 ("\e$(6$S\e(B" . "\e$,15a6-5n\e(B")
1141 ("\e$(6$T\e(B" . "\e$,15a6-5o\e(B")
1142 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1143 ;;2460 \e$(6$`$a$b$c$d$e$f$g$h$i$j$k$l$m$n$o\e(B
1144 ("\e$(6$`\e(B" . "\e$,15b6-5o\e(B")
1145 ("\e$(6$a\e(B" . "\e$,15d6-5d\e(B")
1146 ("\e$(6$b\e(B" . "\e$,15d6-5h\e(B")
1147 ("\e$(6$c\e(B" . "\e$,15f6-5f6-5o\e(B")
1148 ("\e$(6$d\e(B" . "\e$,15f6-5g6-5o\e(B")
1149 ("\e$(6$e\e(B" . "\e$,15f6-5m6-5o\e(B")
1150 ("\e$(6$f\e(B" . "\e$,15f6-5p6-5o\e(B")
1151 ("\e$(6$g\e(B" . "\e$,15f6-5u6-5o\e(B")
1152 ("\e$(6$h\e(B" . "\e$,15f6-5W6-5p\e(B")
1153 ("\e$(6$i\e(B" . "\e$,15f6-5X6-5p\e(B")
1154 ("\e$(6$j\e(B" . "\e$,15f6-5f6-5u\e(B")
1155 ("\e$(6$k\e(B" . "\e$,15f6-5g6-5u\e(B")
1156 ("\e$(6$l\e(B" . "\e$,15f6-5W\e(B")
1157 ("\e$(6$m\e(B" . "\e$,15f6-5X\e(B")
1158 ("\e$(6$n\e(B" . "\e$,15f6-5f\e(B")
1159 ("\e$(6$o\e(B" . "\e$,15f6-5g\e(B")
1160 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
1161 ;;2470 \e$(6$p$q$r$s$t$u$v$w$x$y$z${$|$}$~\e(B
1162 ("\e$(6$p\e(B" . "\e$,15f6-5h\e(B")
1163 ("\e$(6$q\e(B" . "\e$,15f6-5l\e(B")
1164 ("\e$(6$r\e(B" . "\e$,15f6-5m\e(B")
1165 ("\e$(6$s\e(B" . "\e$,15f6-5n\e(B")
1166 ("\e$(6$t\e(B" . "\e$,15f6-5o\e(B")
1167 ("\e$(6$u\e(B" . "\e$,15f6-5u\e(B")
1168 ("\e$(6$v\e(B" . "\e$,15g6-5h\e(B")
1169 ("\e$(6$w\e(B" . "\e$,15h6-5h\e(B")
1170 ("\e$(6$x\e(B" . "\e$,15j6-5d\e(B")
1171 ("\e$(6$y\e(B" . "\e$,15j6-5h\e(B")
1172 ("\e$(6$z\e(B" . "\e$,15j6-5r\e(B")
1173 ("\e$(6${\e(B" . "\e$,15l6-5h\e(B")
1174 ("\e$(6$|\e(B" . "\e$,15l6-5l\e(B")
1175 ("\e$(6$}\e(B" . "\e$,15l6-5u\e(B")
1176 ("\e$(6$~\e(B" . "\e$,15m6-5h\e(B")))
1178 (defconst indian-2-column-to-ucs-regexp
1179 "\e$(6!j!j\e(B\\|\e$(6"8"q\e(B\\|[\e$(6#&#'!*#*\e(B]\e$(6"p\e(B\\|[\e$(6!!\e(B-\e$(6$~\e(B]")
1181 (put 'indian-2-column-to-ucs-chartable 'char-table-extra-slots 1)
1182 (defconst indian-2-column-to-ucs-chartable
1183 (let ((table (make-char-table 'indian-2-column-to-ucs-chartable))
1184 (alist nil))
1185 (dolist (elt indian-2-colum-to-ucs)
1186 (if (= (length (car elt)) 1)
1187 (aset table (aref (car elt) 0) (cdr elt))
1188 (setq alist (cons elt alist))))
1189 (set-char-table-extra-slot table 0 alist)
1190 table))
1192 ;;;###autoload
1193 (defun indian-2-column-to-ucs-region (from to)
1194 "Convert old Emacs Devanagari characters to UCS."
1195 (interactive "r")
1196 (save-excursion
1197 (save-restriction
1198 (let ((pos from)
1199 (alist (char-table-extra-slot indian-2-column-to-ucs-chartable 0)))
1200 (narrow-to-region from to)
1201 (decompose-region from to)
1202 (goto-char (point-min))
1203 (while (re-search-forward indian-2-column-to-ucs-regexp nil t)
1204 (let ((len (- (match-end 0) (match-beginning 0)))
1205 subst)
1206 (if (= len 1)
1207 (setq subst (aref indian-2-column-to-ucs-chartable
1208 (char-after (match-beginning 0))))
1209 (setq subst (cdr (assoc (match-string 0) alist))))
1210 (replace-match (if subst subst "?"))))
1211 (indian-compose-region (point-min) (point-max))))))
1213 (provide 'ind-util)
1215 ;;; ind-util.el ends here