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