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