]> code.delx.au - gnu-emacs/blob - lisp/language/ind-util.el
Add 2012 to FSF copyright years for Emacs files (do not merge to trunk)
[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, 2009, 2010, 2011, 2012
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 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)))
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)))
400 (if (characterp char) (setq char (char-to-string char)))
401 (puthash char (car trans-char) encode-hash)
402 (dolist (trans trans-char)
403 (puthash trans char decode-hash)))))
404
405 (defun indian--map (f l1 l2)
406 (while l1
407 (funcall f (pop l1) (pop l2))))
408
409 (defun indian--puthash-v (v trans-v hashtbls)
410 (indian--map
411 (lambda (v trans-v)
412 (indian--puthash-char (car v) trans-v hashtbls))
413 v trans-v))
414
415 (defun indian--puthash-c (c trans-c halant hashtbls)
416 (indian--map
417 (lambda (c trans-c)
418 (if (characterp c) (setq c (char-to-string c)))
419 (indian--puthash-char (concat c halant) trans-c hashtbls))
420 c trans-c))
421
422 (defun indian--puthash-m (m trans-m hashtbls)
423 (indian--map
424 (lambda (m trans-m)
425 (indian--puthash-char m trans-m hashtbls))
426 m trans-m))
427
428 (defun indian--puthash-cv (c trans-c v trans-v hashtbls)
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)
434 (if (characterp c) (setq c (char-to-string c)))
435 (setq v (if (characterp (cadr v)) (char-to-string (cadr v)) ""))
436 (if (stringp trans-c) (setq trans-c (list trans-c)))
437 (if (stringp trans-v) (setq trans-v (list trans-v)))
438 (indian--puthash-char
439 (concat c v)
440 (mapcar (lambda (x) (apply 'concat x))
441 (combinatorial trans-c trans-v))
442 hashtbls)))
443 v trans-v))
444 c trans-c))
445
446 (defun indian-make-hash (table trans-table)
447 "Indian Transliteration Hash for decode/encode"
448 (let* ((encode-hash (make-hash-table :test 'equal))
449 (decode-hash (make-hash-table :test 'equal))
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)
462 (indian--puthash-cv consonants trans-consonants
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
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))
513 )
514
515 (defmacro indian-translate-region (from to hashtable encode-p)
516 `(save-excursion
517 (save-restriction
518 (let ((regexp ,(indian-regexp-of-hashtbl-keys
519 (if encode-p (car (eval hashtable))
520 (cdr (eval hashtable))))))
521 (narrow-to-region from to)
522 (goto-char (point-min))
523 (while (re-search-forward regexp nil t)
524 (let ((matchstr (gethash (match-string 0)
525 (if ,encode-p
526 (car ,hashtable)
527 (cdr ,hashtable)))))
528 (if matchstr (replace-match matchstr))))))))
529
530 ;;;
531
532 (defun indian-dev-itrans-v5-encode-region (from to)
533 (interactive "r")
534 (indian-translate-region
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")
544 (indian-translate-region
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")
554 (indian-translate-region
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
569 (let
570 ;;Unicode vs IS13194 ;; only Devanagari is supported now.
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)
707 (ucs-malayalam-to-is13194-alist nil)
708 (ucs-kannada-to-is13194-alist nil))
709 (dolist (script '(devanagari bengali assamese gurmukhi gujarati
710 oriya tamil telugu malayalam kannada))
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"))))
715 (set hashtable (make-hash-table :test 'equal :size 128))
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)))
721 (set regexp (indian-regexp-of-hashtbl-keys (eval hashtable))))))
722
723 (defvar is13194-default-repertory 'devanagari)
724
725 (defvar is13194-repertory-to-ucs-script
726 `((DEF ?\x40 ,is13194-default-repertory)
727 (RMN ?\x41 ,is13194-default-repertory)
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)
758 (defvar is13194-to-ucs-kannada-hashtbl nil)
759 (defvar is13194-to-ucs-kannada-regexp nil)
760
761 (defvar ucs-to-is13194-regexp
762 ;; only Devanagari is supported now.
763 (concat "[" (char-to-string #x0900)
764 "-" (char-to-string #x097f) "]")
765 "Regexp that matches to conversion")
766
767 (defun ucs-to-iscii-region (from to)
768 "Converts the indian UCS characters in the region to ISCII.
769 Returns 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))
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))))
781 (point-max))))
782
783 (defun iscii-to-ucs-region (from to)
784 "Converts the ISCII characters in the region to UCS.
785 Returns 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))
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))
800 (hash (eval current-hashtable)))
801 (while (re-search-forward re nil t)
802 (replace-match (gethash (match-string 0) hash ""))))
803 (point-max))))
804
805 ;;;###autoload
806 (defun indian-compose-region (from to)
807 "Compose the region according to `composition-function-table'."
808 (interactive "r")
809 (save-excursion
810 (save-restriction
811 (let ((pos from) newpos func (max to))
812 (narrow-to-region from to)
813 (while (< pos max)
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))))))))
820
821 ;;;###autoload
822 (defun indian-compose-string (string)
823 (with-temp-buffer
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)))
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
849 ;; The following provides the conversion from old-implementation of
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
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")
872 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
890 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
908 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
925 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
939 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
951 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
965 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
977 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
993 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1003 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1018 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1028 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1037 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1044 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1052 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1057 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1074 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1083 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1100 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1118 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1136 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1143 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")
1161 ;; 0 1 2 3 4 5 6 7 8 9 a b c d e f
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")))
1178
1179 (defconst indian-2-column-to-ucs-regexp
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]")
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))
1185 (alist nil))
1186 (dolist (elt indian-2-colum-to-ucs)
1187 (if (= (length (car elt)) 1)
1188 (aset table (aref (car elt) 0) (cdr elt))
1189 (setq alist (cons elt alist))))
1190 (set-char-table-extra-slot table 0 alist)
1191 table))
1192
1193 ;;;###autoload
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)
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
1209 (char-after (match-beginning 0))))
1210 (setq subst (cdr (assoc (match-string 0) alist))))
1211 (replace-match (if subst subst "?"))))
1212 (indian-compose-region (point-min) (point-max))))))
1213
1214 (provide 'ind-util)
1215
1216 ;; arch-tag: 59aacd71-46c2-4cb3-bb26-e12bbad55545
1217 ;;; ind-util.el ends here