merge trunk
[bpt/emacs.git] / lisp / language / ind-util.el
CommitLineData
cd4e9344
RS
1;;; ind-util.el --- Transliteration and Misc. Tools for Indian Languages -*- coding: iso-2022-7bit; -*-
2
acaf905b 3;; Copyright (C) 2001-2012 Free Software Foundation, Inc.
cd4e9344 4
c7357293 5;; Maintainer: KAWABATA, Taichi <kawabata@m17n.org>
cd4e9344
RS
6;; Keywords: multilingual, Indian, Devanagari
7
8;; This file is part of GNU Emacs.
9
4936186e 10;; GNU Emacs is free software: you can redistribute it and/or modify
cd4e9344 11;; it under the terms of the GNU General Public License as published by
4936186e
GM
12;; the Free Software Foundation, either version 3 of the License, or
13;; (at your option) any later version.
cd4e9344
RS
14
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.
19
20;; You should have received a copy of the GNU General Public License
4936186e 21;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
cd4e9344
RS
22
23;;; Commentary:
24
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.
30
31;;; Code:
32
33;;; Transliteration
34
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.
38
39(eval-and-compile
cd4e9344 40
48cb5913 41(defun indian-regexp-of-hashtbl-keys (hashtbl)
cd4e9344 42 "Returns the regular expression of hashtable keys."
462a7ed6
SM
43 (let (keys)
44 (maphash (lambda (key val) (push key keys)) hashtbl)
45 (regexp-opt keys)))
cd4e9344
RS
46
47(defvar indian-dev-base-table
48 '(
49 (;; VOWELS (18)
50 (?\e$,15E\e(B nil) (?\e$,15F\e(B ?\e$,15~\e(B) (?\e$,15G\e(B ?\e$,15\7f\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)
c7357293
KH
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))
cd4e9344
RS
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
a1506d29
JB
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
cd4e9344 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
a1506d29
JB
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
cd4e9344 62 "\e$,15\6-5^\e(B" "\e$,15U6-5w\e(B")
a1506d29 63 (;; Misc Symbols (7)
cd4e9344
RS
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")))
69
c7357293
KH
70;; Punjabi is also known as Gurmukhi.
71(defvar indian-pnj-base-table
72 '(
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")))
93
94(defvar indian-gjr-base-table
95 '(
96 (;; VOWELS
97 (?\e$,19E\e(B nil) (?\e$,19F\e(B ?\e$,19~\e(B) (?\e$,19G\e(B ?\e$,19\7f\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")))
116
117(defvar indian-ori-base-table
118 '(
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:\7f\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")))
139
140(defvar indian-bng-base-table
141 '(
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\7f\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")))
162
163(defvar indian-asm-base-table
164 '(
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\7f\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")))
185
186(defvar indian-tlg-base-table
187 '(
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=\7f\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)))
208
209(defvar indian-knd-base-table
210 '(
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>\7f\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)))
231
232(defvar indian-mlm-base-table
233 '(
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)))
254
255(defvar indian-tml-base-table
256 '(
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
dd7aa8dd 274 ?\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 ?\e$,1=/\e(B)
c7357293
KH
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)))
cd4e9344
RS
277
278(defvar indian-base-table-to-language-alist
279 '((indian-dev-base-table . "Devanagari")
a1506d29 280 (indian-pnj-base-table . "Punjabi")
cd4e9344
RS
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")))
288
289(defvar indian-itrans-v5-table
290 '(;; for encode/decode
291 (;; vowels -- 18
292 "a" ("aa" "A") "i" ("ii" "I") "u" ("uu" "U")
b057ab61
KH
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"))
a1506d29 295 (;; consonants -- 40
cd4e9344
RS
296 "k" "kh" "g" "gh" ("~N" "N^")
297 "ch" ("Ch" "chh") "j" "jh" ("~n" "JN")
298 "T" "Th" "D" "Dh" "N"
a1506d29 299 "t" "th" "d" "dh" "n" "nh"
cd4e9344
RS
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") "..")))
307
dd7aa8dd
KH
308(defvar indian-itrans-v5-table-for-tamil
309 '(;; for encode/decode
310 (;; vowels -- 18
311 "a" ("aa" "A") "i" ("ii" "I") "u" ("uu" "U")
312 ("RRi" "R^i") ("LLi" "L^i") (".c" "e.c") "E" "e" "ai"
313 "o.c" "O" "o" "au" ("RRI" "R^I") ("LLI" "L^I"))
314 (;; consonants -- 40
315 "k" "kh" "g" "gh" ("~N" "N^")
316 "ch" ("Ch" "chh") "j" "jh" ("~n" "JN")
317 "T" "Th" "D" "Dh" "N"
318 "t" "th" "d" "dh" "n" "nh"
319 "p" "ph" "b" "bh" "m"
320 "y" "r" "rh" "l" ("L" "ld") ("J" "z") ("v" "w")
321 "sh" ("Sh" "shh") "s" "h"
322 "q" "K" "G" nil ".D" ".Dh" "f" ("Y" "yh")
323 ("GY" "dny") "x")
324 (;; misc -- 7
325 ".N" (".n" "M") "H" ".a" ".h" ("AUM" "OM") "..")))
326
cd4e9344
RS
327(defvar indian-kyoto-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" ("q" "RR" "Q") ("E" "LL" "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)))
345
346(defvar indian-harvard-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" ("RR" "q" "Q") ("LL" "E" "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)))
364
365(defvar indian-tokyo-table
366 '(;; for encode/decode
367 (;; vowel
368 "a" ("A" "aa") "i" ("I" "ii") "u" ("U" "uu")
369 "R" ("L" "lR") nil nil "e" "ai"
370 nil nil "o" "au" ("Q" "RR" "q") ("E" "LL" "lRR"))
371 (;; consonant
372 "k" "kh" "g" "gh" "G"
373 "c" "ch" "j" "jh" "J"
374 "T" "Th" "D" "Dh" "N"
375 "t" "th" "d" "dh" "n" nil
376 "p" "ph" "b" "bh" "m"
377 "y" "r" nil "l" "L" nil "v"
378 ("Z" "z") "S" "s" "h"
379 nil nil nil nil nil nil nil nil
380 nil nil)
381 (;; misc
382 nil "M" "H" "'" nil "." nil)))
383
384(defvar indian-aiba-table
385 '(;; for encode/decode
386 (;; vowel
387 "a" "aa" "i" "ii" "u" "uu"
388 ".r" ".l" nil nil "e" "ai"
389 nil nil "o" "au" "~r" "~l")
390 (;; consonant
391 "k" "kh" "g" "gh" "^n"
392 "c" "ch" "j" "jh" "~n"
393 ".t" ".th" ".d" ".dh" ".n"
394 "t" "th" "d" "dh" "n" nil
395 "p" "ph" "b" "bh" "m"
396 "y" "r" nil "l" nil nil "v"
397 "^s" ".s" "s" "h"
398 nil nil nil nil nil nil nil nil
399 nil nil)
400 (;; misc
401 nil ".m" ".h" "'" nil "." nil)))
402
dbd9624e
KH
403(defun combinatorial (head &rest tail)
404 (if tail
405 (apply 'append
406 (mapcar (lambda (y) (mapcar (lambda (x) (cons x y)) head))
407 (apply 'combinatorial tail)))
408 (mapcar 'list head)))
cd4e9344
RS
409
410(defun indian--puthash-char (char trans-char hashtbls)
411 (let ((encode-hash (car hashtbls)) ;; char -> trans
412 (decode-hash (cdr hashtbls)) ;; trans -> char
413 )
414 ;; char -- nil / char / string (/ list of vowel & matra)
415 ;; trans-char -- nil / string / list of strings
416 (when (and char trans-char)
417 (if (stringp trans-char) (setq trans-char (list trans-char)))
19150538 418 (if (characterp char) (setq char (char-to-string char)))
cd4e9344 419 (puthash char (car trans-char) encode-hash)
462a7ed6
SM
420 (dolist (trans trans-char)
421 (puthash trans char decode-hash)))))
cd4e9344 422
e6432b68
DL
423(defun indian--map (f l1 l2)
424 (while l1
425 (funcall f (pop l1) (pop l2))))
426
cd4e9344 427(defun indian--puthash-v (v trans-v hashtbls)
a1506d29 428 (indian--map
e6432b68
DL
429 (lambda (v trans-v)
430 (indian--puthash-char (car v) trans-v hashtbls))
cd4e9344
RS
431 v trans-v))
432
433(defun indian--puthash-c (c trans-c halant hashtbls)
e6432b68
DL
434 (indian--map
435 (lambda (c trans-c)
19150538 436 (if (characterp c) (setq c (char-to-string c)))
e6432b68 437 (indian--puthash-char (concat c halant) trans-c hashtbls))
cd4e9344
RS
438 c trans-c))
439
440(defun indian--puthash-m (m trans-m hashtbls)
e6432b68
DL
441 (indian--map
442 (lambda (m trans-m)
443 (indian--puthash-char m trans-m hashtbls))
cd4e9344
RS
444 m trans-m))
445
446(defun indian--puthash-cv (c trans-c v trans-v hashtbls)
e6432b68
DL
447 (indian--map
448 (lambda (c trans-c)
449 (indian--map
450 (lambda (v trans-v)
451 (when (and c trans-c v trans-v)
19150538
DL
452 (if (characterp c) (setq c (char-to-string c)))
453 (setq v (if (characterp (cadr v)) (char-to-string (cadr v)) ""))
e6432b68
DL
454 (if (stringp trans-c) (setq trans-c (list trans-c)))
455 (if (stringp trans-v) (setq trans-v (list trans-v)))
a1506d29 456 (indian--puthash-char
e6432b68 457 (concat c v)
dbd9624e
KH
458 (mapcar (lambda (x) (apply 'concat x))
459 (combinatorial trans-c trans-v))
e6432b68
DL
460 hashtbls)))
461 v trans-v))
cd4e9344
RS
462 c trans-c))
463
464(defun indian-make-hash (table trans-table)
465 "Indian Transliteration Hash for decode/encode"
b1432379
SM
466 (let* ((encode-hash (make-hash-table :test 'equal))
467 (decode-hash (make-hash-table :test 'equal))
cd4e9344
RS
468 (hashtbls (cons encode-hash decode-hash))
469 (vowels (elt table 0))
470 (consonants (elt table 1))
471 (misc (elt table 2))
472 (digits (elt table 3))
473 (halant (char-to-string (elt misc 4)))
474 (trans-vowels (elt trans-table 0))
475 (trans-consonants (elt trans-table 1))
476 (trans-misc (elt trans-table 2))
477 (trans-digits '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9")))
478 (indian--puthash-v vowels trans-vowels hashtbls)
479 (indian--puthash-c consonants trans-consonants halant hashtbls)
a1506d29 480 (indian--puthash-cv consonants trans-consonants
cd4e9344
RS
481 vowels trans-vowels hashtbls)
482 (indian--puthash-m misc trans-misc hashtbls)
483 (indian--puthash-m digits trans-digits hashtbls)
484 hashtbls))
485
486(defvar indian-dev-itrans-v5-hash
487 (indian-make-hash indian-dev-base-table
488 indian-itrans-v5-table))
489(defvar indian-dev-kyoto-harvard-hash
490 (indian-make-hash indian-dev-base-table
491 indian-kyoto-harvard-table))
492(defvar indian-dev-aiba-hash
493 (indian-make-hash indian-dev-base-table
494 indian-aiba-table))
495
c7357293
KH
496(defvar indian-pnj-itrans-v5-hash
497 (indian-make-hash indian-pnj-base-table
498 indian-itrans-v5-table))
499
500(defvar indian-gjr-itrans-v5-hash
501 (indian-make-hash indian-gjr-base-table
502 indian-itrans-v5-table))
503
504(defvar indian-ori-itrans-v5-hash
505 (indian-make-hash indian-ori-base-table
506 indian-itrans-v5-table))
507
508(defvar indian-bng-itrans-v5-hash
509 (indian-make-hash indian-bng-base-table
510 indian-itrans-v5-table))
511
512(defvar indian-asm-itrans-v5-hash
513 (indian-make-hash indian-asm-base-table
514 indian-itrans-v5-table))
515
516(defvar indian-tlg-itrans-v5-hash
517 (indian-make-hash indian-tlg-base-table
518 indian-itrans-v5-table))
519
520(defvar indian-knd-itrans-v5-hash
521 (indian-make-hash indian-knd-base-table
522 indian-itrans-v5-table))
523
524(defvar indian-mlm-itrans-v5-hash
525 (indian-make-hash indian-mlm-base-table
526 indian-itrans-v5-table))
527
528(defvar indian-tml-itrans-v5-hash
529 (indian-make-hash indian-tml-base-table
dd7aa8dd 530 indian-itrans-v5-table-for-tamil))
cd4e9344
RS
531)
532
533(defmacro indian-translate-region (from to hashtable encode-p)
534 `(save-excursion
535 (save-restriction
a1506d29
JB
536 (let ((regexp ,(indian-regexp-of-hashtbl-keys
537 (if encode-p (car (eval hashtable))
cd4e9344
RS
538 (cdr (eval hashtable))))))
539 (narrow-to-region from to)
540 (goto-char (point-min))
541 (while (re-search-forward regexp nil t)
a1506d29 542 (let ((matchstr (gethash (match-string 0)
e6432b68
DL
543 (if ,encode-p
544 (car ,hashtable)
545 (cdr ,hashtable)))))
cd4e9344
RS
546 (if matchstr (replace-match matchstr))))))))
547
548;;;
549
550(defun indian-dev-itrans-v5-encode-region (from to)
551 (interactive "r")
a1506d29 552 (indian-translate-region
cd4e9344
RS
553 from to indian-dev-itrans-v5-hash t))
554
555(defun indian-dev-itrans-v5-decode-region (from to)
556 (interactive "r")
557 (indian-translate-region
558 from to indian-dev-itrans-v5-hash nil))
559
560(defun indian-dev-kyoto-harvard-encode-region (from to)
561 (interactive "r")
a1506d29 562 (indian-translate-region
cd4e9344
RS
563 from to indian-dev-kyoto-harvard-hash t))
564
565(defun indian-dev-kyoto-harvard-decode-region (from to)
566 (interactive "r")
567 (indian-translate-region
568 from to indian-dev-kyoto-harvard-hash nil))
569
570(defun indian-dev-aiba-encode-region (from to)
571 (interactive "r")
a1506d29 572 (indian-translate-region
cd4e9344
RS
573 from to indian-dev-aiba-hash t))
574
575(defun indian-dev-aiba-decode-region (from to)
576 (interactive "r")
577 (indian-translate-region
578 from to indian-dev-aiba-hash nil))
579
580
581
582
583;;; IS 13194 utilities
584
585;; The followings provide conversion between IS 13194 (ISCII) and UCS.
586
3ff57641 587(let
8f924df7 588 ;;Unicode vs IS13194 ;; only Devanagari is supported now.
3ff57641
DL
589 ((ucs-devanagari-to-is13194-alist
590 '((?\x0900 . "[U+0900]")
591 (?\x0901 . "\e(5!\e(B")
592 (?\x0902 . "\e(5"\e(B")
593 (?\x0903 . "\e(5#\e(B")
594 (?\x0904 . "[U+0904]")
595 (?\x0905 . "\e(5$\e(B")
596 (?\x0906 . "\e(5%\e(B")
597 (?\x0907 . "\e(5&\e(B")
598 (?\x0908 . "\e(5'\e(B")
599 (?\x0909 . "\e(5(\e(B")
600 (?\x090a . "\e(5)\e(B")
601 (?\x090b . "\e(5*\e(B")
602 (?\x090c . "\e(5&i\e(B")
603 (?\x090d . "\e(5.\e(B")
604 (?\x090e . "\e(5+\e(B")
605 (?\x090f . "\e(5,\e(B")
606 (?\x0910 . "\e(5-\e(B")
607 (?\x0911 . "\e(52\e(B")
608 (?\x0912 . "\e(5/\e(B")
609 (?\x0913 . "\e(50\e(B")
610 (?\x0914 . "\e(51\e(B")
611 (?\x0915 . "\e(53\e(B")
612 (?\x0916 . "\e(54\e(B")
613 (?\x0917 . "\e(55\e(B")
614 (?\x0918 . "\e(56\e(B")
615 (?\x0919 . "\e(57\e(B")
616 (?\x091a . "\e(58\e(B")
617 (?\x091b . "\e(59\e(B")
618 (?\x091c . "\e(5:\e(B")
619 (?\x091d . "\e(5;\e(B")
620 (?\x091e . "\e(5<\e(B")
621 (?\x091f . "\e(5=\e(B")
622 (?\x0920 . "\e(5>\e(B")
623 (?\x0921 . "\e(5?\e(B")
624 (?\x0922 . "\e(5@\e(B")
625 (?\x0923 . "\e(5A\e(B")
626 (?\x0924 . "\e(5B\e(B")
627 (?\x0925 . "\e(5C\e(B")
628 (?\x0926 . "\e(5D\e(B")
629 (?\x0927 . "\e(5E\e(B")
630 (?\x0928 . "\e(5F\e(B")
631 (?\x0929 . "\e(5G\e(B")
632 (?\x092a . "\e(5H\e(B")
633 (?\x092b . "\e(5I\e(B")
634 (?\x092c . "\e(5J\e(B")
635 (?\x092d . "\e(5K\e(B")
636 (?\x092e . "\e(5L\e(B")
637 (?\x092f . "\e(5M\e(B")
638 (?\x0930 . "\e(5O\e(B")
639 (?\x0931 . "\e(5P\e(B")
640 (?\x0932 . "\e(5Q\e(B")
641 (?\x0933 . "\e(5R\e(B")
642 (?\x0934 . "\e(5S\e(B")
643 (?\x0935 . "\e(5T\e(B")
644 (?\x0936 . "\e(5U\e(B")
645 (?\x0937 . "\e(5V\e(B")
646 (?\x0938 . "\e(5W\e(B")
647 (?\x0939 . "\e(5X\e(B")
648 (?\x093a . "[U+093a]")
649 (?\x093b . "[U+093b]")
650 (?\x093c . "\e(5i\e(B")
651 (?\x093d . "\e(5ji\e(B")
652 (?\x093e . "\e(5Z\e(B")
653 (?\x093f . "\e(5[\e(B")
654 (?\x0940 . "\e(5\\e(B")
655 (?\x0941 . "\e(5]\e(B")
656 (?\x0942 . "\e(5^\e(B")
657 (?\x0943 . "\e(5_\e(B")
658 (?\x0944 . "\e(5_i\e(B")
659 (?\x0945 . "\e(5c\e(B")
660 (?\x0946 . "\e(5`\e(B")
661 (?\x0947 . "\e(5a\e(B")
662 (?\x0948 . "\e(5b\e(B")
663 (?\x0949 . "\e(5g\e(B")
664 (?\x094a . "\e(5d\e(B")
665 (?\x094b . "\e(5e\e(B")
666 (?\x094c . "\e(5f\e(B")
667 (?\x094d . "\e(5h\e(B")
668 (?\x094e . "[U+094e]")
669 (?\x094f . "[U+094f]")
670 (?\x0950 . "\e(5!i\e(B")
671 (?\x0951 . "\e(5p5\e(B")
672 (?\x0952 . "\e(5p8\e(B")
673 (?\x0953 . "[DEVANAGARI GRAVE ACCENT]")
674 (?\x0954 . "[DEVANAGARI ACUTE ACCENT]")
675 (?\x0955 . "[U+0955]")
676 (?\x0956 . "[U+0956]")
677 (?\x0957 . "[U+0957]")
678 (?\x0958 . "\e(53i\e(B")
679 (?\x0959 . "\e(54i\e(B")
680 (?\x095a . "\e(55i\e(B")
681 (?\x095b . "\e(5:i\e(B")
682 (?\x095c . "\e(5?i\e(B")
683 (?\x095d . "\e(5@i\e(B")
684 (?\x095e . "\e(5Ii\e(B")
685 (?\x095f . "\e(5N\e(B")
686 (?\x0960 . "\e(5*i\e(B")
687 (?\x0961 . "\e(5'i\e(B")
688 (?\x0962 . "\e(5[i\e(B")
689 (?\x0963 . "\e(5ei\e(B")
690 (?\x0964 . "\e(5j\e(B")
691 (?\x0965 . "\e(5jj\e(B")
692 (?\x0966 . "\e(5q\e(B")
693 (?\x0967 . "\e(5r\e(B")
694 (?\x0968 . "\e(5s\e(B")
695 (?\x0969 . "\e(5t\e(B")
696 (?\x096a . "\e(5u\e(B")
697 (?\x096b . "\e(5v\e(B")
698 (?\x096c . "\e(5w\e(B")
699 (?\x096d . "\e(5x\e(B")
700 (?\x096e . "\e(5y\e(B")
701 (?\x096f . "\e(5z\e(B")
702 (?\x0970 . "[U+0970]")
703 (?\x0971 . "[U+0971]")
704 (?\x0972 . "[U+0972]")
705 (?\x0973 . "[U+0973]")
706 (?\x0974 . "[U+0974]")
707 (?\x0975 . "[U+0975]")
708 (?\x0976 . "[U+0976]")
709 (?\x0977 . "[U+0977]")
710 (?\x0978 . "[U+0978]")
711 (?\x0979 . "[U+0979]")
712 (?\x097a . "[U+097a]")
713 (?\x097b . "[U+097b]")
714 (?\x097c . "[U+097c]")
715 (?\x097d . "[U+097d]")
716 (?\x097e . "[U+097e]")
717 (?\x097f . "[U+097f]")))
718 (ucs-bengali-to-is13194-alist nil)
719 (ucs-assamese-to-is13194-alist nil)
720 (ucs-gurmukhi-to-is13194-alist nil)
721 (ucs-gujarati-to-is13194-alist nil)
722 (ucs-oriya-to-is13194-alist nil)
723 (ucs-tamil-to-is13194-alist nil)
724 (ucs-telugu-to-is13194-alist nil)
6b61353c
KH
725 (ucs-malayalam-to-is13194-alist nil)
726 (ucs-kannada-to-is13194-alist nil))
3ff57641 727 (dolist (script '(devanagari bengali assamese gurmukhi gujarati
6b61353c 728 oriya tamil telugu malayalam kannada))
f47a2e09
DL
729 (let ((hashtable (intern (concat "is13194-to-ucs-"
730 (symbol-name script) "-hashtbl" )))
731 (regexp (intern (concat "is13194-to-ucs-"
732 (symbol-name script) "-regexp"))))
cd4e9344 733 (set hashtable (make-hash-table :test 'equal :size 128))
3ff57641
DL
734 (dolist (x (eval (intern (concat "ucs-" (symbol-name script)
735 "-to-is13194-alist"))))
736 (put-char-code-property (car x) 'script script)
737 (put-char-code-property (car x) 'iscii (cdr x))
738 (puthash (cdr x) (char-to-string (car x)) (eval hashtable)))
8f924df7
KH
739 (set regexp (indian-regexp-of-hashtbl-keys (eval hashtable))))))
740
741(defvar is13194-default-repertory 'devanagari)
cd4e9344
RS
742
743(defvar is13194-repertory-to-ucs-script
8f924df7
KH
744 `((DEF ?\x40 ,is13194-default-repertory)
745 (RMN ?\x41 ,is13194-default-repertory)
cd4e9344
RS
746 (DEV ?\x42 devanagari)
747 (BNG ?\x43 bengali)
748 (TML ?\x44 tamil)
749 (TLG ?\x45 telugu)
750 (ASM ?\x46 bengali)
751 (ORI ?\x47 oriya)
752 (KND ?\x48 kannada)
753 (MLM ?\x49 malayalam)
754 (GJR ?\x4a gujarati)
755 (PNJ ?\x4b gurmukhi)))
756
757;; for guiding find-variable function.
758(defvar is13194-to-ucs-devanagari-hashtbl nil)
759(defvar is13194-to-ucs-devanagari-regexp nil)
760(defvar is13194-to-ucs-bengali-hashtbl nil)
761(defvar is13194-to-ucs-bengali-regexp nil)
762(defvar is13194-to-ucs-assamese-hashtbl nil)
763(defvar is13194-to-ucs-assamese-regexp nil)
764(defvar is13194-to-ucs-gurmukhi-hashtbl nil)
765(defvar is13194-to-ucs-gurmukhi-regexp nil)
766(defvar is13194-to-ucs-gujarati-hashtbl nil)
767(defvar is13194-to-ucs-gujarati-regexp nil)
768(defvar is13194-to-ucs-oriya-hashtbl nil)
769(defvar is13194-to-ucs-oriya-regexp nil)
770(defvar is13194-to-ucs-tamil-hashtbl nil)
771(defvar is13194-to-ucs-tamil-regexp nil)
772(defvar is13194-to-ucs-telugu-hashtbl nil)
773(defvar is13194-to-ucs-telugu-regexp nil)
774(defvar is13194-to-ucs-malayalam-hashtbl nil)
775(defvar is13194-to-ucs-malayalam-regexp nil)
6b61353c
KH
776(defvar is13194-to-ucs-kannada-hashtbl nil)
777(defvar is13194-to-ucs-kannada-regexp nil)
cd4e9344 778
cd4e9344
RS
779(defvar ucs-to-is13194-regexp
780 ;; only Devanagari is supported now.
19150538 781 (concat "[" (char-to-string #x0900)
8f924df7 782 "-" (char-to-string #x097f) "]")
cd4e9344
RS
783 "Regexp that matches to conversion")
784
785(defun ucs-to-iscii-region (from to)
a1506d29 786 "Converts the indian UCS characters in the region to ISCII.
cd4e9344
RS
787Returns new end position."
788 (interactive "r")
789 ;; only Devanagari is supported now.
790 (save-excursion
791 (save-restriction
792 (narrow-to-region from to)
793 (goto-char (point-min))
f47a2e09
DL
794 (let* ((current-repertory is13194-default-repertory))
795 (while (re-search-forward ucs-to-is13194-regexp nil t)
796 (replace-match
797 (get-char-code-property (string-to-char (match-string 0))
798 'iscii))))
cd4e9344
RS
799 (point-max))))
800
801(defun iscii-to-ucs-region (from to)
a1506d29 802 "Converts the ISCII characters in the region to UCS.
cd4e9344
RS
803Returns new end position."
804 (interactive "r")
805 ;; only Devanagari is supported now.
806 (save-excursion
807 (save-restriction
808 (narrow-to-region from to)
809 (goto-char (point-min))
f47a2e09
DL
810 (let* ((current-repertory is13194-default-repertory)
811 (current-hashtable
812 (intern (concat "is13194-to-ucs-"
813 (symbol-name current-repertory) "-hashtbl")))
814 (current-regexp
815 (intern (concat "is13194-to-ucs-"
816 (symbol-name current-repertory) "-regexp")))
817 (re (eval current-regexp))
12bb15ad 818 (hash (eval current-hashtable)))
f47a2e09
DL
819 (while (re-search-forward re nil t)
820 (replace-match (gethash (match-string 0) hash ""))))
cd4e9344
RS
821 (point-max))))
822
823;;;###autoload
824(defun indian-compose-region (from to)
6acef79f 825 "Compose the region according to `composition-function-table'."
cd4e9344
RS
826 (interactive "r")
827 (save-excursion
828 (save-restriction
6acef79f 829 (let ((pos from) newpos func (max to))
f47a2e09
DL
830 (narrow-to-region from to)
831 (while (< pos max)
6acef79f
KH
832 (setq func (aref composition-function-table (char-after pos)))
833 (if (fboundp func)
834 (setq newpos (funcall func pos nil)
835 pos (if (and (integerp newpos) (> newpos pos))
836 newpos (1+ pos)))
837 (setq pos (1+ pos))))))))
cd4e9344
RS
838
839;;;###autoload
840(defun indian-compose-string (string)
a1506d29 841 (with-temp-buffer
cd4e9344
RS
842 (insert string)
843 (indian-compose-region (point-min) (point-max))
844 (buffer-string)))
845
846;;;###autoload
847(defun in-is13194-post-read-conversion (len)
848 (let ((pos (point)) endpos)
849 (setq endpos (iscii-to-ucs-region pos (+ pos len)))
cd4e9344
RS
850 (- endpos pos)))
851
852;;;###autoload
853(defun in-is13194-pre-write-conversion (from to)
854 (let ((buf (current-buffer)))
855 (set-buffer (generate-new-buffer " *temp*"))
856 (if (stringp from)
857 (insert from)
858 (insert-buffer-substring buf from to))
859 (ucs-to-iscii-region (point-min) (point-max))
860 nil))
861
862
863
864
865;;; Backward Compatibility support programs
866
f47a2e09 867;; The following provides the conversion from old-implementation of
cd4e9344
RS
868;; Emacs Devanagari script to UCS.
869
870(defconst indian-2-colum-to-ucs
871 '(
872 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
873 ;;2120 \e$(6!!!"!#!$!%!&!'!(!)!*!+!,!-!.!/\e(B
874 ("\e$(6!!\e(B" . "\e$,15A\e(B")
875 ("\e$(6!"\e(B" . "\e$,15B\e(B")
876 ("\e$(6!#\e(B" . "\e$,15C\e(B")
877 ("\e$(6!$\e(B" . "\e$,15E\e(B")
878 ("\e$(6!%\e(B" . "\e$,15F\e(B")
879 ("\e$(6!&\e(B" . "\e$,15G\e(B")
880 ("\e$(6!'\e(B" . "\e$,15H\e(B")
881 ("\e$(6!(\e(B" . "\e$,15I\e(B")
882 ("\e$(6!)\e(B" . "\e$,15J\e(B")
883 ("\e$(6!*\e(B" . "\e$,15K\e(B")
884 ("\e$(6!*"p\e(B" . "\e$,15p6#\e(B")
885 ("\e$(6!+\e(B" . "\e$,15N\e(B")
886 ("\e$(6!,\e(B" . "\e$,15O\e(B")
887 ("\e$(6!-\e(B" . "\e$,15P\e(B")
888 ("\e$(6!.\e(B" . "\e$,15M\e(B")
889 ("\e$(6!/\e(B" . "\e$,15R\e(B")
cd4e9344 890 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
891 ;;2130 \e$(6!0!1!2!3!4!5!6!7!8!9!:!;!<!=!>!?\e(B
892 ("\e$(6!0\e(B" . "\e$,15S\e(B")
893 ("\e$(6!1\e(B" . "\e$,15T\e(B")
894 ("\e$(6!2\e(B" . "\e$,15Q\e(B")
895 ("\e$(6!3\e(B" . "\e$,15U\e(B")
896 ("\e$(6!4\e(B" . "\e$,15V\e(B")
897 ("\e$(6!5\e(B" . "\e$,15W\e(B")
898 ("\e$(6!6\e(B" . "\e$,15X\e(B")
899 ("\e$(6!7\e(B" . "\e$,15Y\e(B")
900 ("\e$(6!8\e(B" . "\e$,15Z\e(B")
901 ("\e$(6!9\e(B" . "\e$,15[\e(B")
902 ("\e$(6!:\e(B" . "\e$,15\\e(B")
903 ("\e$(6!;\e(B" . "\e$,15]\e(B")
904 ("\e$(6!<\e(B" . "\e$,15^\e(B")
905 ("\e$(6!=\e(B" . "\e$,15_\e(B")
906 ("\e$(6!>\e(B" . "\e$,15`\e(B")
907 ("\e$(6!?\e(B" . "\e$,15a\e(B")
cd4e9344 908 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
909 ;;2140 \e$(6!@!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O\e(B
910 ("\e$(6!@\e(B" . "\e$,15b\e(B")
911 ("\e$(6!A\e(B" . "\e$,15c\e(B")
912 ("\e$(6!B\e(B" . "\e$,15d\e(B")
913 ("\e$(6!C\e(B" . "\e$,15e\e(B")
914 ("\e$(6!D\e(B" . "\e$,15f\e(B")
915 ("\e$(6!E\e(B" . "\e$,15g\e(B")
916 ("\e$(6!F\e(B" . "\e$,15h\e(B")
917 ("\e$(6!G\e(B" . "\e$,15i\e(B")
918 ("\e$(6!H\e(B" . "\e$,15j\e(B")
919 ("\e$(6!I\e(B" . "\e$,15k\e(B")
920 ("\e$(6!J\e(B" . "\e$,15l\e(B")
921 ("\e$(6!K\e(B" . "\e$,15m\e(B")
922 ("\e$(6!L\e(B" . "\e$,15n\e(B")
923 ("\e$(6!M\e(B" . "\e$,15o\e(B")
924 ("\e$(6!N\e(B" . "\e$,16?\e(B")
925 ("\e$(6!O\e(B" . "\e$,15p\e(B")
cd4e9344 926 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
927 ;;2150 \e$(6!P!Q!R!S!T!U!V!W!X!Y!Z![!\!]!^!_\e(B
928 ("\e$(6!P\e(B" . "\e$,15q\e(B")
929 ("\e$(6!Q\e(B" . "\e$,15r\e(B")
930 ("\e$(6!R\e(B" . "\e$,15s\e(B")
931 ("\e$(6!S\e(B" . "\e$,15t\e(B")
932 ("\e$(6!T\e(B" . "\e$,15u\e(B")
933 ("\e$(6!U\e(B" . "\e$,15v\e(B")
934 ("\e$(6!V\e(B" . "\e$,15w\e(B")
935 ("\e$(6!W\e(B" . "\e$,15x\e(B")
936 ("\e$(6!X\e(B" . "\e$,15y\e(B")
937 ("\e$(6!Z\e(B" . "\e$,15~\e(B")
938 ("\e$(6![\e(B" . "\e$,15\7f\e(B")
939 ("\e$(6!\\e(B" . "\e$,16 \e(B")
940 ("\e$(6!]\e(B" . "\e$,16!\e(B")
941 ("\e$(6!^\e(B" . "\e$,16"\e(B")
942 ("\e$(6!_\e(B" . "\e$,16#\e(B")
cd4e9344 943 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
944 ;;2160 \e$(6!`!a!b!c!d!e!f!g!h!i!j!k!l!m!n!o\e(B
945 ("\e$(6!`\e(B" . "\e$,16&\e(B")
946 ("\e$(6!a\e(B" . "\e$,16'\e(B")
947 ("\e$(6!b\e(B" . "\e$,16(\e(B")
948 ("\e$(6!c\e(B" . "\e$,16%\e(B")
949 ("\e$(6!d\e(B" . "\e$,16*\e(B")
950 ("\e$(6!e\e(B" . "\e$,16+\e(B")
951 ("\e$(6!f\e(B" . "\e$,16,\e(B")
952 ("\e$(6!g\e(B" . "\e$,16)\e(B")
953 ("\e$(6!h\e(B" . "\e$,16-\e(B")
954 ("\e$(6!i\e(B" . "\e$,15|\e(B")
955 ("\e$(6!j\e(B" . "\e$,16D\e(B")
956 ("\e$(6!j!j\e(B" . "\e$,16E\e(B")
cd4e9344 957 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
958 ;;2170 \e$(6!p!q!r!s!t!u!v!w!x!y!z!{!|!}!~\e(B
959 ("\e$(6!q\e(B" . "\e$,16F\e(B")
960 ("\e$(6!r\e(B" . "\e$,16G\e(B")
961 ("\e$(6!s\e(B" . "\e$,16H\e(B")
962 ("\e$(6!t\e(B" . "\e$,16I\e(B")
963 ("\e$(6!u\e(B" . "\e$,16J\e(B")
964 ("\e$(6!v\e(B" . "\e$,16K\e(B")
965 ("\e$(6!w\e(B" . "\e$,16L\e(B")
966 ("\e$(6!x\e(B" . "\e$,16M\e(B")
967 ("\e$(6!y\e(B" . "\e$,16N\e(B")
968 ("\e$(6!z\e(B" . "\e$,16O\e(B")
cd4e9344 969 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
970 ;;2220 \e$(6"!"""#"$"%"&"'"(")"*"+","-"."/\e(B
971 ("\e$(6"!\e(B" . "\e$,16;6-5p\e(B")
972 ("\e$(6""\e(B" . "\e$,16>6-5p\e(B")
973 ("\e$(6"#\e(B" . "\e$,15U6-5p\e(B")
974 ("\e$(6"$\e(B" . "\e$,15W6-5p\e(B")
975 ("\e$(6"%\e(B" . "\e$,15d6-5p\e(B")
976 ("\e$(6"&\e(B" . "\e$,15j6-5p\e(B")
977 ("\e$(6"'\e(B" . "\e$,15k6-5p\e(B")
978 ("\e$(6")\e(B" . "\e$,15v6-5p\e(B")
979 ("\e$(6",\e(B" . "\e$,15p6!\e(B")
980 ("\e$(6"-\e(B" . "\e$,15p6"\e(B")
981 ("\e$(6".\e(B" . "\e$,15q6!\e(B")
982 ("\e$(6"/\e(B" . "\e$,15q6"\e(B")
cd4e9344 983 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
984 ;;2230 \e$(6"0"1"2"3"4"5"6"7"8"9":";"<"=">"?\e(B
985 ("\e$(6"3\e(B" . "\e$,15U6-\e(B")
986 ("\e$(6"4\e(B" . "\e$,15V6-\e(B")
987 ("\e$(6"5\e(B" . "\e$,15W6-\e(B")
988 ("\e$(6"6\e(B" . "\e$,15X6-\e(B")
989 ("\e$(6"8\e(B" . "\e$,15Z6-\e(B")
990 ("\e$(6"8"q\e(B" . "\e$,15Z6-5p6-\e(B")
991 ("\e$(6":\e(B" . "\e$,15\6-\e(B")
992 ("\e$(6";\e(B" . "\e$,15]6-\e(B")
993 ("\e$(6"<\e(B" . "\e$,15^6-\e(B")
994 ("\e$(6"<\e(B" . "\e$,15^6-\e(B")
cd4e9344 995 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
996 ;;2240 \e$(6"@"A"B"C"D"E"F"G"H"I"J"K"L"M"N"O\e(B
997 ("\e$(6"A\e(B" . "\e$,15c6-\e(B")
998 ("\e$(6"B\e(B" . "\e$,15d6-\e(B")
999 ("\e$(6"C\e(B" . "\e$,15e6-\e(B")
1000 ("\e$(6"E\e(B" . "\e$,15g6-\e(B")
1001 ("\e$(6"F\e(B" . "\e$,15h6-\e(B")
1002 ("\e$(6"G\e(B" . "\e$,15i6-\e(B")
1003 ("\e$(6"H\e(B" . "\e$,15j6-\e(B")
1004 ("\e$(6"I\e(B" . "\e$,15k6-\e(B")
1005 ("\e$(6"J\e(B" . "\e$,15l6-\e(B")
1006 ("\e$(6"J\e(B" . "\e$,15l6-\e(B")
1007 ("\e$(6"K\e(B" . "\e$,15m6-\e(B")
1008 ("\e$(6"L\e(B" . "\e$,15n6-\e(B")
1009 ("\e$(6"M\e(B" . "\e$,15o6-\e(B")
1010 ("\e$(6"N\e(B" . "\e$,16?6-\e(B")
cd4e9344 1011 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1012 ;;2250 \e$(6"P"Q"R"S"T"U"V"W"X"Y"Z"["\"]"^"_\e(B
1013 ("\e$(6"Q\e(B" . "\e$,15r6-\e(B")
1014 ("\e$(6"R\e(B" . "\e$,15s6-\e(B")
1015 ("\e$(6"S\e(B" . "\e$,15t6-\e(B")
1016 ("\e$(6"T\e(B" . "\e$,15u6-\e(B")
1017 ("\e$(6"U\e(B" . "\e$,15v6-\e(B")
1018 ("\e$(6"V\e(B" . "\e$,15w6-\e(B")
1019 ("\e$(6"W\e(B" . "\e$,15x6-\e(B")
1020 ("\e$(6"]\e(B" . "\e$,16-5o\e(B")
cd4e9344 1021 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1022 ;;2260 \e$(6"`"a"b"c"d"e"f"g"h"i"j"k"l"m"n"o\e(B
1023 ("\e$(6"`\e(B" . "\e$,15W6-5p6-\e(B")
1024 ("\e$(6"a\e(B" . "\e$,15X6-5h6-\e(B")
1025 ("\e$(6"c\e(B" . "\e$,15d6-5d6-\e(B")
1026 ("\e$(6"d\e(B" . "\e$,15d6-5p6-\e(B")
1027 ("\e$(6"e\e(B" . "\e$,15g6-5h6-\e(B")
1028 ("\e$(6"f\e(B" . "\e$,15g6-5p6-\e(B")
1029 ("\e$(6"g\e(B" . "\e$,15j6-5d6-\e(B")
1030 ("\e$(6"h\e(B" . "\e$,15v6-5Z6-\e(B")
1031 ("\e$(6"i\e(B" . "\e$,15v6-5p6-\e(B")
1032 ("\e$(6"j\e(B" . "\e$,15v6-5u6-\e(B")
1033 ("\e$(6"k\e(B" . "\e$,15h6-5h6-\e(B")
1034 ("\e$(6"l\e(B" . "\e$,15U6-5w6-\e(B")
1035 ("\e$(6"m\e(B" . "\e$,15\6-5^6-\e(B")
cd4e9344 1036 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1037 ;;2270 \e$(6"p"q"r"s"t"u"v"w"x"y"z"{"|"}"~\e(B
1038 ("\e$(6"p\e(B" . "\e$,15p6-\e(B")
1039 ("\e$(6"q\e(B" . "\e$,16-5p\e(B")
1040 ("\e$(6"r\e(B" . "\e$,16-5p\e(B")
1041 ("\e$(6"s\e(B" . "\e$,1686-\e(B")
1042 ("\e$(6"t\e(B" . "\e$,1696-\e(B")
1043 ("\e$(6"u\e(B" . "\e$,16:6-\e(B")
1044 ("\e$(6"y\e(B" . "\e$,16>6-\e(B")
1045 ("\e$(6"z\e(B" . "\e$,16;6-\e(B")
cd4e9344 1046 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1047 ;;2320 \e$(6#!#"###$#%#&#'#(#)#*#+#,#-#.#/\e(B
1048 ("\e$(6#!\e(B" . "\e$,160\e(B")
1049 ("\e$(6#&\e(B" . "\e$,15L\e(B")
1050 ("\e$(6#&"p\e(B" . "\e$,15p6$\e(B")
1051 ("\e$(6#'\e(B" . "\e$,16A\e(B")
1052 ("\e$(6#'"p\e(B" . "\e$,15p6C\e(B")
1053 ("\e$(6#*\e(B" . "\e$,16@\e(B")
1054 ("\e$(6#*"p\e(B" . "\e$,15p6B\e(B")
cd4e9344 1055 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1056 ;;2330 \e$(6#0#1#2#3#4#5#6#7#8#9#:#;#<#=#>#?\e(B
1057 ("\e$(6#3\e(B" . "\e$,168\e(B")
1058 ("\e$(6#4\e(B" . "\e$,169\e(B")
1059 ("\e$(6#5\e(B" . "\e$,16:\e(B")
1060 ("\e$(6#:\e(B" . "\e$,16;\e(B")
1061 ("\e$(6#?\e(B" . "\e$,16<\e(B")
cd4e9344 1062 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1063 ;;2340 \e$(6#@#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O\e(B
1064 ("\e$(6#@\e(B" . "\e$,16=\e(B")
1065 ("\e$(6#I\e(B" . "\e$,16>\e(B")
1066 ("\e$(6#J\e(B" . "\e$,15}\e(B")
1067 ("\e$(6#K\e(B" . "\e$,16$\e(B")
1068 ("\e$(6#L\e(B" . "\e$,16B\e(B")
1069 ("\e$(6#M\e(B" . "\e$,16C\e(B")
cd4e9344 1070 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1071 ;;2350 \e$(6#P#Q#R#S#T#U#V#W#X#Y#Z#[#\#]#^#_\e(B
1072 ("\e$(6#P\e(B" . "\e$,15n6-5h\e(B")
1073 ("\e$(6#Q\e(B" . "\e$,15n6-5r\e(B")
1074 ("\e$(6#R\e(B" . "\e$,15y6#\e(B")
cd4e9344 1075 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1076 ;;2360 \e$(6#`#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o\e(B
1077 ("\e$(6#`\e(B" . "\e$,15r6-5r\e(B")
1078 ("\e$(6#a\e(B" . "\e$,15u6-5h\e(B")
1079 ("\e$(6#b\e(B" . "\e$,15u6-5u\e(B")
1080 ("\e$(6#c\e(B" . "\e$,15v6-5Z\e(B")
1081 ("\e$(6#d\e(B" . "\e$,15v6-5h\e(B")
1082 ("\e$(6#e\e(B" . "\e$,15v6-5l\e(B")
1083 ("\e$(6#f\e(B" . "\e$,15v6-5r\e(B")
1084 ("\e$(6#g\e(B" . "\e$,15v6-5u\e(B")
1085 ("\e$(6#h\e(B" . "\e$,15w6-5_6-5p6-5o\e(B")
1086 ("\e$(6#i\e(B" . "\e$,15w6-5_6-5o\e(B")
1087 ("\e$(6#j\e(B" . "\e$,15w6-5_6-5u\e(B")
1088 ("\e$(6#k\e(B" . "\e$,15w6-5_\e(B")
1089 ("\e$(6#l\e(B" . "\e$,15w6-5`\e(B")
1090 ("\e$(6#m\e(B" . "\e$,15x6-5h\e(B")
1091 ("\e$(6#n\e(B" . "\e$,15x6-5p\e(B")
cd4e9344 1092 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1093 ;;2370 \e$(6#p#q#r#s#t#u#v#w#x#y#z#{#|#}#~\e(B
1094 ("\e$(6#p\e(B" . "\e$,15y6-5c\e(B")
1095 ("\e$(6#q\e(B" . "\e$,15y6-5h\e(B")
1096 ("\e$(6#r\e(B" . "\e$,15y6-5n\e(B")
1097 ("\e$(6#s\e(B" . "\e$,15y6-5o\e(B")
1098 ("\e$(6#t\e(B" . "\e$,15y6-5p\e(B")
1099 ("\e$(6#u\e(B" . "\e$,15y6-5r\e(B")
1100 ("\e$(6#v\e(B" . "\e$,15y6-5u\e(B")
cd4e9344 1101 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1102 ;;2420 \e$(6$!$"$#$$$%$&$'$($)$*$+$,$-$.$/\e(B
1103 ("\e$(6$!\e(B" . "\e$,15U6-5d6-5p6-5o\e(B")
1104 ("\e$(6$"\e(B" . "\e$,15U6-5d6-5u\e(B")
1105 ("\e$(6$#\e(B" . "\e$,15U6-5d6-5o\e(B")
1106 ("\e$(6$$\e(B" . "\e$,15U6-5h6-5o\e(B")
1107 ("\e$(6$%\e(B" . "\e$,15U6-5p6-5o\e(B")
1108 ("\e$(6$&\e(B" . "\e$,15U6-5u6-5o\e(B")
1109 ("\e$(6$'\e(B" . "\e$,15U6-5U\e(B")
1110 ("\e$(6$(\e(B" . "\e$,15U6-5d\e(B")
1111 ("\e$(6$)\e(B" . "\e$,15U6-5h\e(B")
1112 ("\e$(6$*\e(B" . "\e$,15U6-5n\e(B")
1113 ("\e$(6$+\e(B" . "\e$,15U6-5o\e(B")
1114 ("\e$(6$,\e(B" . "\e$,15U6-5r\e(B")
1115 ("\e$(6$-\e(B" . "\e$,15U6-5u\e(B")
1116 ("\e$(6$.\e(B" . "\e$,15U6-5w\e(B")
1117 ("\e$(6$/\e(B" . "\e$,15X6-5h\e(B")
cd4e9344 1118 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1119 ;;2430 \e$(6$0$1$2$3$4$5$6$7$8$9$:$;$<$=$>$?\e(B
1120 ("\e$(6$0\e(B" . "\e$,15Y6-5U6-5d6-5o\e(B")
1121 ("\e$(6$1\e(B" . "\e$,15Y6-5U6-5w6-5u\e(B")
1122 ("\e$(6$2\e(B" . "\e$,15Y6-5U6-5d\e(B")
1123 ("\e$(6$3\e(B" . "\e$,15Y6-5U6-5w\e(B")
1124 ("\e$(6$4\e(B" . "\e$,15Y6-5X6-5p\e(B")
1125 ("\e$(6$5\e(B" . "\e$,15Y6-5U6-5o\e(B")
1126 ("\e$(6$6\e(B" . "\e$,15Y6-5V6-5o\e(B")
1127 ("\e$(6$7\e(B" . "\e$,15Y6-5W6-5o\e(B")
1128 ("\e$(6$8\e(B" . "\e$,15Y6-5X6-5o\e(B")
1129 ("\e$(6$9\e(B" . "\e$,15Y6-5U\e(B")
1130 ("\e$(6$:\e(B" . "\e$,15Y6-5V\e(B")
1131 ("\e$(6$;\e(B" . "\e$,15Y6-5W\e(B")
1132 ("\e$(6$<\e(B" . "\e$,15Y6-5X\e(B")
1133 ("\e$(6$=\e(B" . "\e$,15Y6-5Y\e(B")
1134 ("\e$(6$>\e(B" . "\e$,15Y6-5h\e(B")
1135 ("\e$(6$?\e(B" . "\e$,15Y6-5n\e(B")
cd4e9344 1136 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1137 ;;2440 \e$(6$@$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O\e(B
1138 ("\e$(6$@\e(B" . "\e$,15Y6-5o\e(B")
1139 ("\e$(6$A\e(B" . "\e$,15Z6-5Z\e(B")
1140 ("\e$(6$B\e(B" . "\e$,15Z6-5^\e(B")
1141 ("\e$(6$C\e(B" . "\e$,15[6-5o\e(B")
1142 ("\e$(6$D\e(B" . "\e$,15\6-5p\e(B")
1143 ("\e$(6$E\e(B" . "\e$,15\6-5^\e(B")
1144 ("\e$(6$F\e(B" . "\e$,15^6-5Z\e(B")
1145 ("\e$(6$G\e(B" . "\e$,15^6-5\\e(B")
1146 ("\e$(6$H\e(B" . "\e$,15_6-5U\e(B")
1147 ("\e$(6$I\e(B" . "\e$,15_6-5_\e(B")
1148 ("\e$(6$J\e(B" . "\e$,15_6-5`\e(B")
1149 ("\e$(6$K\e(B" . "\e$,15_6-5o\e(B")
1150 ("\e$(6$L\e(B" . "\e$,15`6-5o\e(B")
1151 ("\e$(6$M\e(B" . "\e$,15a6-5W6-5o\e(B")
1152 ("\e$(6$N\e(B" . "\e$,15a6-5X6-5p\e(B")
1153 ("\e$(6$O\e(B" . "\e$,15a6-5p6-5o\e(B")
cd4e9344 1154 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1155 ;;2450 \e$(6$P$Q$R$S$T$U$V$W$X$Y$Z$[$\$]$^$_\e(B
1156 ("\e$(6$P\e(B" . "\e$,15a6-5W\e(B")
1157 ("\e$(6$Q\e(B" . "\e$,15a6-5X\e(B")
1158 ("\e$(6$R\e(B" . "\e$,15a6-5a\e(B")
1159 ("\e$(6$S\e(B" . "\e$,15a6-5n\e(B")
1160 ("\e$(6$T\e(B" . "\e$,15a6-5o\e(B")
cd4e9344 1161 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1162 ;;2460 \e$(6$`$a$b$c$d$e$f$g$h$i$j$k$l$m$n$o\e(B
1163 ("\e$(6$`\e(B" . "\e$,15b6-5o\e(B")
1164 ("\e$(6$a\e(B" . "\e$,15d6-5d\e(B")
1165 ("\e$(6$b\e(B" . "\e$,15d6-5h\e(B")
1166 ("\e$(6$c\e(B" . "\e$,15f6-5f6-5o\e(B")
1167 ("\e$(6$d\e(B" . "\e$,15f6-5g6-5o\e(B")
1168 ("\e$(6$e\e(B" . "\e$,15f6-5m6-5o\e(B")
1169 ("\e$(6$f\e(B" . "\e$,15f6-5p6-5o\e(B")
1170 ("\e$(6$g\e(B" . "\e$,15f6-5u6-5o\e(B")
1171 ("\e$(6$h\e(B" . "\e$,15f6-5W6-5p\e(B")
1172 ("\e$(6$i\e(B" . "\e$,15f6-5X6-5p\e(B")
1173 ("\e$(6$j\e(B" . "\e$,15f6-5f6-5u\e(B")
1174 ("\e$(6$k\e(B" . "\e$,15f6-5g6-5u\e(B")
1175 ("\e$(6$l\e(B" . "\e$,15f6-5W\e(B")
1176 ("\e$(6$m\e(B" . "\e$,15f6-5X\e(B")
1177 ("\e$(6$n\e(B" . "\e$,15f6-5f\e(B")
1178 ("\e$(6$o\e(B" . "\e$,15f6-5g\e(B")
cd4e9344 1179 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
6acef79f
KH
1180 ;;2470 \e$(6$p$q$r$s$t$u$v$w$x$y$z${$|$}$~\e(B
1181 ("\e$(6$p\e(B" . "\e$,15f6-5h\e(B")
1182 ("\e$(6$q\e(B" . "\e$,15f6-5l\e(B")
1183 ("\e$(6$r\e(B" . "\e$,15f6-5m\e(B")
1184 ("\e$(6$s\e(B" . "\e$,15f6-5n\e(B")
1185 ("\e$(6$t\e(B" . "\e$,15f6-5o\e(B")
1186 ("\e$(6$u\e(B" . "\e$,15f6-5u\e(B")
1187 ("\e$(6$v\e(B" . "\e$,15g6-5h\e(B")
1188 ("\e$(6$w\e(B" . "\e$,15h6-5h\e(B")
1189 ("\e$(6$x\e(B" . "\e$,15j6-5d\e(B")
1190 ("\e$(6$y\e(B" . "\e$,15j6-5h\e(B")
1191 ("\e$(6$z\e(B" . "\e$,15j6-5r\e(B")
1192 ("\e$(6${\e(B" . "\e$,15l6-5h\e(B")
1193 ("\e$(6$|\e(B" . "\e$,15l6-5l\e(B")
1194 ("\e$(6$}\e(B" . "\e$,15l6-5u\e(B")
1195 ("\e$(6$~\e(B" . "\e$,15m6-5h\e(B")))
cd4e9344
RS
1196
1197(defconst indian-2-column-to-ucs-regexp
6acef79f 1198 "\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]")
cd4e9344
RS
1199
1200(put 'indian-2-column-to-ucs-chartable 'char-table-extra-slots 1)
1201(defconst indian-2-column-to-ucs-chartable
1202 (let ((table (make-char-table 'indian-2-column-to-ucs-chartable))
f47a2e09 1203 (alist nil))
cd4e9344
RS
1204 (dolist (elt indian-2-colum-to-ucs)
1205 (if (= (length (car elt)) 1)
f47a2e09
DL
1206 (aset table (aref (car elt) 0) (cdr elt))
1207 (setq alist (cons elt alist))))
cd4e9344
RS
1208 (set-char-table-extra-slot table 0 alist)
1209 table))
1210
2ba14a8f 1211;;;###autoload
cd4e9344
RS
1212(defun indian-2-column-to-ucs-region (from to)
1213 "Convert old Emacs Devanagari characters to UCS."
1214 (interactive "r")
1215 (save-excursion
1216 (save-restriction
1217 (let ((pos from)
f47a2e09
DL
1218 (alist (char-table-extra-slot indian-2-column-to-ucs-chartable 0)))
1219 (narrow-to-region from to)
1220 (decompose-region from to)
1221 (goto-char (point-min))
1222 (while (re-search-forward indian-2-column-to-ucs-regexp nil t)
1223 (let ((len (- (match-end 0) (match-beginning 0)))
1224 subst)
1225 (if (= len 1)
1226 (setq subst (aref indian-2-column-to-ucs-chartable
e6432b68 1227 (char-after (match-beginning 0))))
8f924df7 1228 (setq subst (cdr (assoc (match-string 0) alist))))
f47a2e09
DL
1229 (replace-match (if subst subst "?"))))
1230 (indian-compose-region (point-min) (point-max))))))
a1506d29 1231
cd4e9344 1232(provide 'ind-util)
a1506d29 1233
cd4e9344 1234;;; ind-util.el ends here