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