Mercurial > emacs
annotate lisp/language/devan-util.el @ 17241:d5cbb3a06adc libc-970325 libc-970326 libc-970327 libc-970328 libc-970329 libc-970330 libc-970331 libc-970401 libc-970402 libc-970403 libc-970404 libc-970405 libc-970406 libc-970407 libc-970408 libc-970409 libc-970410 libc-970411
(m32r,mn10300): Add.
author | Doug Evans <dje@gnu.org> |
---|---|
date | Mon, 24 Mar 1997 20:38:28 +0000 |
parents | fb13faeea9aa |
children | 01d528c5dd18 |
rev | line source |
---|---|
17052 | 1 ;;; devan-util.el --- Support for Devanagari Script Composition |
2 | |
3 ;; Copyright (C) 1996 Free Software Foundation, Inc. | |
4 | |
5 ;; Author: KAWABATA, Taichi <kawabata@is.s.u-tokyo.ac.jp> | |
6 | |
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 2, or (at your option) | |
14 ;; 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 | |
17071 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 ;; Boston, MA 02111-1307, USA. | |
17052 | 25 |
26 ;;; Commentary: | |
27 | |
28 ;; History: | |
29 ;; 1996.10.18 written by KAWABATA, Taichi <kawabata@is.s.u-tokyo.ac.jp> | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
30 ;; 1997.1.20 fixed some bugs. |
17052 | 31 |
32 ;; Devanagari script composition rules and related programs. | |
33 | |
34 ;;; Code: | |
35 | |
36 ;;; | |
37 ;;; Steps toward composition of Devanagari Characters. | |
38 ;;; | |
39 | |
40 ;;; Basic functions. | |
41 | |
42 ;;;###autoload | |
43 (defun indian-to-devanagari (ch) | |
44 "Convert IS 13194 characters to Devanagari basic characters." | |
45 (let ((charcodes (split-char ch))) | |
46 (if (eq (car charcodes) 'indian-is13194) | |
47 (make-char 'indian-2-column ?\x21 (nth 1 charcodes)) | |
48 ch))) | |
49 | |
50 ;;;###autoload | |
51 (defun devanagari-to-indian (ch) | |
52 "Convert Devanagari basic characters to IS 13194 characters." | |
53 (let* ((charcodes (split-char ch)) | |
54 (charset (car charcodes)) | |
55 (code-h (car (cdr charcodes)))) | |
56 (if (and (eq (car charcodes) 'indian-2-column) | |
57 (= (nth 1 charcodes) ?\x21)) | |
58 (make-char 'indian-is13194 (nth 2 charcodes)) | |
59 ch))) | |
60 | |
61 ;;;###autoload | |
62 (defun indian-to-devanagari-region (from to) | |
63 "Convert IS 13194 characters in region to Devanagari basic characters." | |
64 (interactive "r") | |
65 (save-restriction | |
66 (narrow-to-region from to) | |
67 (goto-char (point-min)) | |
68 (while (re-search-forward "\\cd" nil t) | |
69 (let* ((devanagari-char (indian-to-devanagari (preceding-char)))) | |
70 (delete-char -1) | |
71 (insert devanagari-char))))) | |
72 | |
73 ;;;###autoload | |
74 (defun devanagari-to-indian-region (from to) | |
75 "Convert Devanagari basic characters in region to Indian characters." | |
76 (interactive "r") | |
77 (save-restriction | |
78 (narrow-to-region from to) | |
79 (goto-char (point-min)) | |
80 (while (re-search-forward "\\cD" nil t) ; Devanagari Character Code. | |
81 (let* ((indian-char (devanagari-to-indian (preceding-char)))) | |
82 (delete-char -1) | |
83 (insert indian-char))))) | |
84 | |
85 ;;;###autoload | |
86 (defun indian-to-devanagari-string (str) | |
87 "Convert Indian String to Devanagari Basic Character String." | |
88 (let ((pos 0) (dst "") (src str) char) | |
89 (while (not (equal src "")) | |
90 (setq char (string-to-char src)) | |
91 (setq src (substring src (char-bytes char))) | |
92 (setq dst (concat dst (char-to-string (indian-to-devanagari char))))) | |
93 dst)) | |
94 | |
95 ;; Phase 0 - Determine whether the characters can be composed. | |
96 ;; | |
97 ;;; | |
98 ;;; Regular expressions to split characters for composition. | |
99 ;;; | |
100 ;; | |
101 ;; Indian script word contains one or more syllables. | |
102 ;; In BNF, it can be expressed as follows: | |
103 ;; | |
104 ;; Word ::= {Syllable} [Cons-Syllable] | |
105 ;; Syllable ::= Cons-Vowel-Syllable | Vowel-Syllable | |
106 ;; Vowel-Syllable ::= V[D] | |
107 ;; Cons-Vowel-Syllable ::= [Cons-Syllable] Full-Cons [M] [D] | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
108 ;; Cons-Syllable ::= [Pure-Cons] [Pure-Cons] [Pure-Cons] Pure-Cons |
17052 | 109 ;; Pure-Cons ::= Full-Cons H |
110 ;; Full-Cons ::= C [N] | |
111 ;; | |
112 ;; {} repeat, [] optional | |
113 ;; | |
114 ;; C - Consonant ($(5!3!4!5!6!7!8!9!:!;!<!=!>!?!@!A!B!C!D!E(B | |
115 ;; $(5!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!W!X(B) | |
116 ;; N - Nukta ($(5!i(B) | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
117 ;; H - Halant($(5!h(B) or Virama |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
118 ;; V - Vowel ($(5!$!%!&!'!(!)!*!+!,!-!.!/!0!1!2#&#'#*(B) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
119 ;; ("$(5#&#'#*(B" can be obtained by IS13194 vowels with nukta.) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
120 ;; D - Vowel Modifiers, i.e. Anuswar, Chandrabindu, Visarga ($(5!!!"!#(B) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
121 ;; M - Matra ($(5!Z![!\!]!^!_!`!a!b!c!d!e!f!g#K#L#M(B) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
122 ;; ("$(5#K#L#M(B" can be obtained by IS13194 matras with nukta.) |
17052 | 123 ;; |
124 ;; In Emacs, one syllable of Indian language is considered to be one | |
125 ;; composite glyph. If we expand the above expression, it would be: | |
126 ;; | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
127 ;; [[C [N] H] [C [N] H] [C [N] H] C [N] H] C [N] [M] [D] | V [D] |
17052 | 128 ;; |
129 ;; Therefore, in worst case, the consonant syllabe will consist of | |
130 ;; following characters. | |
131 ;; | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
132 ;; C N H C N H C N H C N H C N M D |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
133 ;; |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
134 ;; The example is a sanskrit word "kaurtsnya", where five consecutive |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
135 ;; consonant appears. |
17052 | 136 ;; |
137 ;; On the other hand, incomplete consonant syllable before inputting | |
138 ;; base consonant must satisfy the following condition: | |
139 ;; | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
140 ;; [C [N] H] [C [N] H] [C [N] H] C [N] H |
17052 | 141 ;; |
142 ;; This is acceptable BEFORE proper consonant-syllable is input. The | |
143 ;; string which doesn't match with the above expression is invalid and | |
144 ;; thus must be fixed. | |
145 ;; | |
146 ;; Note: | |
147 ;; Third case can be considered, which is acceptable syllable and can | |
148 ;; not add any code more. | |
149 ;; | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
150 ;; [[C [N] H] [C [N] H] [C [N] H] C [N] H] C [N] [M] D |
17052 | 151 ;; |
152 ;; However, to make editing possible even in this condition, we will | |
153 ;; not consider about this case. | |
154 | |
155 (defconst devanagari-cons-syllable-examine | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
156 "\\(\\([$(5!3(B-$(5!X(B]$(5!i(B?$(5!h(B\\)?\\([$(5!3(B-$(5!X(B]$(5!i(B?$(5!h(B\\)?[$(5!3(B-$(5!X(B]$(5!i(B?$(5!h(B\\)?[$(5!3(B-$(5!X(B]$(5!i(B?\\([$(5!Z(B-$(5!g#K#L#M(B]\\|\\($(5!_!i(B\\)\\|\\($(5![!i(B\\)\\|\\($(5!\!i(B\\)\\)?[$(5!!!"!#(B]?" |
17052 | 157 "Regexp matching to one Devanagari consonant syllable.") |
158 | |
159 (defconst devanagari-cons-syllable-incomplete-examine | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
160 "\\([$(5!3(B-$(5!X(B]$(5!i(B?$(5!h(B\\)?\\([$(5!3(B-$(5!X(B]$(5!i(B?$(5!h(B\\)?\\([$(5!3(B-$(5!X(B]$(5!i(B?$(5!h(B\\)?[$(5!3(B-$(5!X(B]$(5!i(B?$(5!h(B$" |
17052 | 161 "Regexp matching to one Devanagari incomplete consonant syllable.") |
162 | |
163 (defconst devanagari-vowel-syllable-examine | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
164 "\\([$(5!$(B-$(5!2#&#'#*(B]\\|\\($(5!*!i(B\\)\\|\\($(5!&!i(B\\)\\|\\($(5!'!i(B\\)\\)[$(5!!!"!#(B]?" |
17052 | 165 "Regexp matching to one Devanagari vowel syllable.") |
166 | |
167 ;; | |
168 ;; Also, digits and virams should be processed other than syllables. | |
169 ;; | |
170 ;; In IS 13194, Avagrah is obtained by Nukta after Viram, and | |
171 ;; OM is obtained by Nukta after Chandrabindu | |
172 ;; | |
173 (defconst devanagari-digit-viram-examine | |
174 "[$(5!q(B-$(5!z!j(B]") | |
175 (defconst devanagari-other-sign-examine | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
176 "\\([$(5!!!j(B]$(5!i(B\\)\\|\\([$(5#!#J(B]\\)") |
17052 | 177 |
178 (defconst devanagari-composite-glyph-unit-examine | |
179 (concat "\\(" devanagari-cons-syllable-incomplete-examine | |
180 "\\)\\|\\(" devanagari-vowel-syllable-examine | |
181 "\\)\\|\\(" devanagari-digit-viram-examine | |
182 "\\)\\|\\(" devanagari-cons-syllable-examine | |
183 "\\)\\|\\(" devanagari-other-sign-examine"\\)") | |
184 "Regexp matching to Devanagari string to be composed form one glyph.") | |
185 | |
186 ;;(put-charset-property charset-devanagari-1-column | |
187 ;; 'char-to-glyph 'devanagari-compose-string) | |
188 ;;(put-charset-property charset-devanagari-2-column | |
189 ;; 'char-to-glyph 'devanagari-compose-string) | |
190 | |
191 ;; Sample | |
192 ;; | |
193 ;;(string-match devanagari-cons-syllable-examine "$(5!X" . "$(5",(B") | |
243 ("\\($(5!O!^(B\\)" . "$(5"-(B") | |
244 ("\\($(5!P!](B\\)" . "$(5".(B") | |
245 ("\\($(5!P!^(B\\)" . "$(5"/(B") | |
246 | |
247 ;; `r' at the top of syllable and followed by other consonants. | |
248 ;; ("[^$(5!h(B]\\($(5!O!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"p(B") | |
249 ("^\\($(5!O!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"p(B") | |
250 | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
251 ;; Half Form Ligature |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
252 ;; Here is the half-form ligature which has higher priority than |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
253 ;; the common ligature rules listed below. |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
254 ;; special forms. |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
255 ("\\($(5!3!h!V!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"l(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
256 ("\\($(5!:!h!<!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"m(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
257 ;; Ordinary forms. |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
258 ("\\($(5!B!h!B!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"c(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
259 ("\\($(5!F!h!F!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"k(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
260 |
17052 | 261 ;; If "r" is preceded by the vowel-suppressed consonant |
262 ;; (especially those with vertical line), it will be written as | |
263 ;; slanted line below the preceding consonant character. Some of | |
264 ;; them are pre-composed as one glyph. | |
265 | |
266 ("\\($(5!:!i!h!O(B\\)" . "$(5"!(B") | |
267 ("\\($(5!I!i!h!O(B\\)" . "$(5""(B") | |
268 ("\\($(5!3!h!O(B\\)" . "$(5"#(B") | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
269 ("\\($(5!5!h!O(B\\)" . "$(5"$(B") |
17052 | 270 ("\\($(5!B!h!O(B\\)" . "$(5"%(B") |
271 ("\\($(5!H!h!O(B\\)" . "$(5"&(B") | |
272 ("\\($(5!I!h!O(B\\)" . "$(5"'(B") | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
273 ("\\($(5!U!h!O(B\\)" . "$(5")(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
274 |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
275 ;; Special Rules |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
276 ;; In the following case, "$(5!<!h!:(B" ligature does not occur. |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
277 ("\\($(5!<!h(B\\)$(5!:!h!<!h(B" . "$(5"<(B") |
17052 | 278 |
279 ;; Ligature Rules | |
280 ("\\($(5!3!h!B!h!O!h!M(B\\)" . "$(5$!(B") | |
281 ("\\($(5!3!h!B!h!T(B\\)" . "$(5$"(B") | |
282 ("\\($(5!3!h!B!h!M(B\\)" . "$(5$#(B") | |
283 ("\\($(5!3!h!F!h!M(B\\)" . "$(5$$(B") | |
284 ("\\($(5!3!h!O!h!M(B\\)" . "$(5$%(B") | |
285 ("\\($(5!3!h!T!h!M(B\\)" . "$(5$&(B") | |
286 ("\\($(5!3!h!3(B\\)" . "$(5$'(B") | |
287 ("\\($(5!3!h!B(B\\)" . "$(5$((B") | |
288 ("\\($(5!3!h!F(B\\)" . "$(5$)(B") | |
289 ("\\($(5!3!h!L(B\\)" . "$(5$*(B") | |
290 ("\\($(5!3!h!M(B\\)" . "$(5$+(B") | |
291 ("\\($(5!3!h!Q(B\\)" . "$(5$,(B") | |
292 ("\\($(5!3!h!T(B\\)" . "$(5$-(B") | |
293 ("\\($(5!3!h!V(B\\)" . "$(5$.(B") | |
294 ("\\($(5!6!h!F(B\\)" . "$(5$/(B") | |
295 ("\\($(5!7!h!3!h!B!h!M(B\\)" . "$(5$0(B") | |
296 ("\\($(5!7!h!3!h!V!h!T(B\\)" . "$(5$1(B") | |
297 ("\\($(5!7!h!3!h!B(B\\)" . "$(5$2(B") | |
298 ("\\($(5!7!h!3!h!V(B\\)" . "$(5$3(B") | |
299 ("\\($(5!7!h!6!h!O(B\\)" . "$(5$4(B") | |
300 ("\\($(5!7!h!3!h!M(B\\)" . "$(5$5(B") | |
301 ("\\($(5!7!h!4!h!M(B\\)" . "$(5$6(B") | |
302 ("\\($(5!7!h!5!h!M(B\\)" . "$(5$7(B") | |
303 ("\\($(5!7!h!6!h!M(B\\)" . "$(5$8(B") | |
304 ("\\($(5!7!h!3(B\\)" . "$(5$9(B") | |
305 ("\\($(5!7!h!4(B\\)" . "$(5$:(B") | |
306 ("\\($(5!7!h!5(B\\)" . "$(5$;(B") | |
307 ("\\($(5!7!h!6(B\\)" . "$(5$<(B") | |
308 ("\\($(5!7!h!7(B\\)" . "$(5$=(B") | |
309 ("\\($(5!7!h!F(B\\)" . "$(5$>(B") | |
310 ("\\($(5!7!h!L(B\\)" . "$(5$?(B") | |
311 ("\\($(5!7!h!M(B\\)" . "$(5$@(B") | |
312 ("\\($(5!8!h!8(B\\)" . "$(5$A(B") | |
313 ("\\($(5!8!h!<(B\\)" . "$(5$B(B") | |
314 ("\\($(5!9!h!M(B\\)" . "$(5$C(B") | |
315 ("\\($(5!:!h!O(B\\)" . "$(5$D(B") | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
316 ("\\($(5!:!h!<(B\\)" . "$(5$E(B") |
17052 | 317 ("\\($(5!<!h!8(B\\)" . "$(5$F(B") |
318 ("\\($(5!<!h!:(B\\)" . "$(5$G(B") | |
319 ("\\($(5!=!h!3(B\\)" . "$(5$H(B") | |
320 ("\\($(5!=!h!=(B\\)" . "$(5$I(B") | |
321 ("\\($(5!=!h!>(B\\)" . "$(5$J(B") | |
322 ("\\($(5!=!h!M(B\\)" . "$(5$K(B") | |
323 ("\\($(5!>!h!M(B\\)" . "$(5$L(B") | |
324 ("\\($(5!?!h!5!h!M(B\\)" . "$(5$M(B") | |
325 ("\\($(5!?!h!6!h!O(B\\)" . "$(5$N(B") | |
326 ("\\($(5!?!h!O!h!M(B\\)" . "$(5$O(B") | |
327 ("\\($(5!?!h!5(B\\)" . "$(5$P(B") | |
328 ("\\($(5!?!h!6(B\\)" . "$(5$Q(B") | |
329 ("\\($(5!?!h!?(B\\)" . "$(5$R(B") | |
330 ("\\($(5!?!h!L(B\\)" . "$(5$S(B") | |
331 ("\\($(5!?!h!M(B\\)" . "$(5$T(B") | |
332 ("\\($(5!@!h!M(B\\)" . "$(5$`(B") | |
333 ("\\($(5!B!h!B(B\\)" . "$(5$a(B") | |
334 ("\\($(5!B!h!F(B\\)" . "$(5$b(B") | |
335 ("\\($(5!D!h!D!h!M(B\\)" . "$(5$c(B") | |
336 ("\\($(5!D!h!E!h!M(B\\)" . "$(5$d(B") | |
337 ("\\($(5!D!h!K!h!M(B\\)" . "$(5$e(B") | |
338 ("\\($(5!D!h!O!h!M(B\\)" . "$(5$f(B") | |
339 ("\\($(5!D!h!T!h!M(B\\)" . "$(5$g(B") | |
340 ("\\($(5!D!h!5!h!O(B\\)" . "$(5$h(B") | |
341 ("\\($(5!D!h!6!h!O(B\\)" . "$(5$i(B") | |
342 ("\\($(5!D!h!D!h!T(B\\)" . "$(5$j(B") | |
343 ("\\($(5!D!h!E!h!T(B\\)" . "$(5$k(B") | |
344 ("\\($(5!D!h!5(B\\)" . "$(5$l(B") | |
345 ("\\($(5!D!h!6(B\\)" . "$(5$m(B") | |
346 ("\\($(5!D!h!D(B\\)" . "$(5$n(B") | |
347 ("\\($(5!D!h!E(B\\)" . "$(5$o(B") | |
348 ("\\($(5!D!h!F(B\\)" . "$(5$p(B") | |
349 ("\\($(5!D!h!J(B\\)" . "$(5$q(B") | |
350 ("\\($(5!D!h!K(B\\)" . "$(5$r(B") | |
351 ("\\($(5!D!h!L(B\\)" . "$(5$s(B") | |
352 ("\\($(5!D!h!M(B\\)" . "$(5$t(B") | |
353 ("\\($(5!D!h!T(B\\)" . "$(5$u(B") | |
354 ("\\($(5!E!h!F(B\\)" . "$(5$v(B") | |
355 ("\\($(5!F!h!F(B\\)" . "$(5$w(B") | |
356 ("\\($(5!H!h!B(B\\)" . "$(5$x(B") | |
357 ("\\($(5!H!h!F(B\\)" . "$(5$y(B") | |
358 ("\\($(5!H!h!Q(B\\)" . "$(5$z(B") | |
359 ("\\($(5!J!h!F(B\\)" . "$(5${(B") | |
360 ("\\($(5!J!h!J(B\\)" . "$(5$|(B") | |
361 ("\\($(5!J!h!T(B\\)" . "$(5$}(B") | |
362 ("\\($(5!K!h!F(B\\)" . "$(5$~(B") | |
363 ("\\($(5!L!h!F(B\\)" . "$(5#P(B") | |
364 ("\\($(5!L!h!Q(B\\)" . "$(5#Q(B") | |
365 ("\\($(5!Q!h!Q(B\\)" . "$(5#`(B") | |
366 ("\\($(5!T!h!F(B\\)" . "$(5#a(B") | |
367 ("\\($(5!T!h!T(B\\)" . "$(5#b(B") | |
368 ("\\($(5!U!h!8(B\\)" . "$(5#c(B") | |
369 ("\\($(5!U!h!F(B\\)" . "$(5#d(B") | |
370 ("\\($(5!U!h!J(B\\)" . "$(5#e(B") | |
371 ("\\($(5!U!h!Q(B\\)" . "$(5#f(B") | |
372 ("\\($(5!U!h!T(B\\)" . "$(5#g(B") | |
373 ("\\($(5!V!h!=!h!O!h!M(B\\)" . "$(5#h(B") | |
374 ("\\($(5!V!h!=!h!M(B\\)" . "$(5#i(B") | |
375 ("\\($(5!V!h!=!h!T(B\\)" . "$(5#j(B") | |
376 ("\\($(5!V!h!=(B\\)" . "$(5#k(B") | |
377 ("\\($(5!V!h!>(B\\)" . "$(5#l(B") | |
378 ("\\($(5!W!h!F(B\\)" . "$(5#m(B") | |
379 ("\\($(5!W!h!O(B\\)" . "$(5#n(B") | |
380 ("\\($(5!X!h!A(B\\)" . "$(5#p(B") | |
381 ("\\($(5!X!h!F(B\\)" . "$(5#q(B") | |
382 ("\\($(5!X!h!L(B\\)" . "$(5#r(B") | |
383 ("\\($(5!X!h!M(B\\)" . "$(5#s(B") | |
384 ("\\($(5!X!h!O(B\\)" . "$(5#t(B") | |
385 ("\\($(5!X!h!Q(B\\)" . "$(5#u(B") | |
386 ("\\($(5!X!h!T(B\\)" . "$(5#v(B") | |
387 ;; Special Ligature Rules | |
388 ("\\($(5!X!_(B\\)" . "$(5#R(B") | |
389 | |
390 ;; Half form with ligature. Special "r" case is included. "r" | |
391 ;; connection which is not listed here has not been examined yet. | |
392 ;; I don't know what to do with them. | |
393 ;; | |
394 ;; ordinary forms | |
395 ("\\($(5!5!h!O!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"`(B") | |
396 ("\\($(5!6!h!F!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"a(B") | |
397 ;; ("\\($(5!<!h!8!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"c(B") ; Mistake, must check later. | |
398 ("\\($(5!B!h!O!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"d(B") | |
399 ("\\($(5!E!h!F!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"e(B") | |
400 ("\\($(5!E!h!O!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"f(B") | |
401 ("\\($(5!H!h!B!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"g(B") | |
402 ("\\($(5!U!h!8!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"h(B") | |
403 ("\\($(5!U!h!O!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"i(B") | |
404 ("\\($(5!U!h!T!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"j(B") | |
405 ;; ("\\($(5!U!h!T!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"k(B") ; must check later. | |
406 ;; Conjunction form associated with Nukta sign. | |
407 ("\\($(5!3!i!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"s(B") | |
408 ("\\($(5!4!i!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"t(B") | |
409 ("\\($(5!5!i!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"u(B") | |
410 ("\\($(5!:!i!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"z(B") | |
411 ("\\($(5!I!i!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"y(B") | |
412 | |
413 ;; For consonants other than listed above, glyph-composition will | |
414 ;; be applied. If the consonant which is preceding "$(5!O(B" does not | |
415 ;; have the vertical line (such as "$(5!?(B"), "$(5"r(B" is put beneath the | |
416 ;; consonant. | |
417 ;; | |
418 ("[$(5!7!9!=!>!?!@!D!O!P!R!S!X(B]\\($(5!h!O(B\\)" . "$(5"r(B") | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
419 ("\\($(5!J!h!O(B\\)" . "$(5!J"r(B") ; Protect from Half form conversion. |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
420 ("\\($(5!E!h!O(B\\)" . "$(5!E"r(B") ; Will be replaced with precomposed font. |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
421 ("\\($(5!6!h!O(B\\)" . "$(5!6"r(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
422 ("\\($(5!K!h!O(B\\)" . "$(5!K"r(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
423 ("\\($(5!T!h!O(B\\)" . "$(5!T"r(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
424 ("\\($(5!L!h!O(B\\)" . "$(5!L"r(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
425 ("\\($(5!7!h!5!h!O(B\\)" . "$(5$;"r(B") ; Ggr |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
426 ("\\($(5!7!h!3!h!O(B\\)" . "$(5$9"r(B") ; Gkr |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
427 |
17052 | 428 ("$(5!?!i(B\\($(5!h!O(B\\)" . "$(5"r(B") |
429 ("$(5!@!i(B\\($(5!h!O(B\\)" . "$(5"r(B") | |
430 | |
431 ;; Nukta | |
432 ("\\($(5!!!i(B\\)" . "$(5#!(B") | |
433 ("\\($(5!&!i(B\\)" . "$(5#&(B") | |
434 ("\\($(5!'!i(B\\)" . "$(5#'(B") | |
435 ("\\($(5!*!i(B\\)" . "$(5#*(B") | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
436 ("\\($(5![!i(B\\)" . "$(5#L(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
437 ("\\($(5!\!i(B\\)" . "$(5#M(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
438 ("\\($(5!_!i(B\\)" . "$(5#K(B") |
17052 | 439 ("\\($(5!3!i(B\\)" . "$(5#3(B") |
440 ("\\($(5!4!i(B\\)" . "$(5#4(B") | |
441 ("\\($(5!5!i(B\\)" . "$(5#5(B") | |
442 ("\\($(5!:!i(B\\)" . "$(5#:(B") | |
443 ("\\($(5!?!i(B\\)" . "$(5#?(B") | |
444 ("\\($(5!@!i(B\\)" . "$(5#@(B") | |
445 ("\\($(5!I!i(B\\)" . "$(5#I(B") | |
446 ("\\($(5!j!i(B\\)" . "$(5#J(B") | |
447 | |
448 ;; Half forms. | |
449 ("\\($(5!3!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"3(B") | |
450 ("\\($(5!4!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"4(B") | |
451 ("\\($(5!5!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"5(B") | |
452 ("\\($(5!6!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"6(B") | |
453 ("\\($(5!8!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"8(B") | |
454 ("\\($(5!:!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5":(B") | |
455 ("\\($(5!;!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5";(B") | |
456 ("\\($(5!<!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"<(B") | |
457 ("\\($(5!A!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"A(B") | |
458 ("\\($(5!B!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"B(B") | |
459 ("\\($(5!C!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"C(B") | |
460 ("\\($(5!E!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"E(B") | |
461 ("\\($(5!F!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"F(B") | |
462 ("\\($(5!G!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"G(B") | |
463 ("\\($(5!H!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"H(B") | |
464 ("\\($(5!I!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"I(B") | |
465 ("\\($(5!J!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"J(B") | |
466 ("\\($(5!K!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"K(B") | |
467 ("\\($(5!L!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"L(B") | |
468 ("\\($(5!M!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"M(B") | |
469 ("\\($(5!N!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"N(B") | |
470 ("\\($(5!Q!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"Q(B") | |
471 ("\\($(5!R!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"R(B") | |
472 ("\\($(5!S!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"S(B") | |
473 ("\\($(5!T!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"T(B") | |
474 ("\\($(5!U!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"U(B") | |
475 ("\\($(5!V!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"V(B") | |
476 ("\\($(5!W!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"W(B") | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
477 |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
478 ;; Special rule for "rR" |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
479 ("\\($(5!O!_(B\\)" . "$(5!*"p(B") |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
480 ;; If everything fails, "y" will connect to the front consonant. |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
481 ("\\($(5!h!M(B\\)" . "$(5"](B") |
17052 | 482 ) |
483 "Alist of regexps of Devanagari character sequences vs composed characters.") | |
484 | |
485 ;; Example: | |
486 ;;("\\($(5!F!h(B\\)[$(5!3(B-$(5!X(B]" . "$(5"F(B") | |
487 ;;(string-match "\\($(5!F!h(B\\)[$(5!3(B-$(5!X(B]" "$(5!X) | |
648 (?$(5!^(B 40 (bc . tc)) | |
649 (?$(5!_(B 40 (bc . tc)) | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
650 (?$(5!`(B 40 (mr . mr)) ; (tc . bc) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
651 (?$(5!a(B 40 (mr . mr)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
652 (?$(5!b(B 40 (mr . mr)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
653 (?$(5!c(B 40 (mr . mr)) |
17052 | 654 (?$(5!d(B 40) |
655 (?$(5!e(B 40) | |
656 (?$(5!f(B 40) | |
657 (?$(5!g(B 40) | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
658 (?$(5!h(B 0 (br . tr)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
659 (?$(5!i(B 0 (br . tr)) |
17052 | 660 (?$(5!j(B 0) |
661 (nil 0) | |
662 (nil 0) | |
663 (nil 0) | |
664 (nil 0) | |
665 (nil 0) | |
666 (nil 0) | |
667 (?$(5!q(B 0) | |
668 (?$(5!r(B 0) | |
669 (?$(5!s(B 0) | |
670 (?$(5!t(B 0) | |
671 (?$(5!u(B 0) | |
672 (?$(5!v(B 0) | |
673 (?$(5!w(B 0) | |
674 (?$(5!x(B 0) | |
675 (?$(5!y(B 0) | |
676 (?$(5!z(B 0) | |
677 (nil 0) | |
678 (nil 0) | |
679 (nil 0) | |
680 (nil 0) | |
681 (?$(5"!(B 0) | |
682 (?$(5""(B 0) | |
683 (?$(5"#(B 0) | |
684 (?$(5"$(B 0) | |
685 (?$(5"%(B 0) | |
686 (?$(5"&(B 0) | |
687 (?$(5"'(B 0) | |
688 (?$(5"((B 0) | |
689 (?$(5")(B 0) | |
690 (?$(5"*(B 0) | |
691 (?$(5"+(B 0) | |
692 (?$(5",(B 0) | |
693 (?$(5"-(B 0) | |
694 (?$(5".(B 0) | |
695 (?$(5"/(B 0) | |
696 (?$(5"0(B 0) | |
697 (?$(5"1(B 0) | |
698 (?$(5"2(B 0) | |
699 (?$(5"3(B 0) | |
700 (?$(5"4(B 0) | |
701 (?$(5"5(B 0) | |
702 (?$(5"6(B 0) | |
703 (?$(5"7(B 0) | |
704 (?$(5"8(B 0) | |
705 (?$(5"9(B 0) | |
706 (?$(5":(B 0) | |
707 (?$(5";(B 0) | |
708 (?$(5"<(B 0) | |
709 (?$(5"=(B 0) | |
710 (?$(5">(B 0) | |
711 (?$(5"?(B 0) | |
712 (?$(5"@(B 0) | |
713 (?$(5"A(B 0) | |
714 (?$(5"B(B 0) | |
715 (?$(5"C(B 0) | |
716 (?$(5"D(B 0) | |
717 (?$(5"E(B 0) | |
718 (?$(5"F(B 0) | |
719 (?$(5"G(B 0) | |
720 (?$(5"H(B 0) | |
721 (?$(5"I(B 0) | |
722 (?$(5"J(B 0) | |
723 (?$(5"K(B 0) | |
724 (?$(5"L(B 0) | |
725 (?$(5"M(B 0) | |
726 (?$(5"N(B 0) | |
727 (?$(5"O(B 0) | |
728 (?$(5"P(B 0) | |
729 (?$(5"Q(B 0) | |
730 (?$(5"R(B 0) | |
731 (?$(5"S(B 0) | |
732 (?$(5"T(B 0) | |
733 (?$(5"U(B 0) | |
734 (?$(5"V(B 0) | |
735 (?$(5"W(B 0) | |
736 (?$(5"X(B 0) | |
737 (?$(5"Y(B 0) | |
738 (?$(5"Z(B 0) | |
739 (?$(5"[(B 0) | |
740 (?$(5"\(B 0) | |
741 (?$(5"](B 0) | |
742 (?$(5"^(B 0) | |
743 (?$(5"_(B 0) | |
744 (?$(5"`(B 0) | |
745 (?$(5"a(B 0) | |
746 (?$(5"b(B 0) | |
747 (?$(5"c(B 0) | |
748 (?$(5"d(B 0) | |
749 (?$(5"e(B 0) | |
750 (?$(5"f(B 0) | |
751 (?$(5"g(B 0) | |
752 (?$(5"h(B 0) | |
753 (?$(5"i(B 0) | |
754 (?$(5"j(B 0) | |
755 (?$(5"k(B 0) | |
756 (?$(5"l(B 0) | |
757 (?$(5"m(B 0) | |
758 (?$(5"n(B 0) | |
759 (?$(5"o(B 0) | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
760 (?$(5"p(B 30 (mr . mr)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
761 (?$(5"q(B 30 (br . tr)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
762 (?$(5"r(B 30 (br . tr)) |
17052 | 763 (?$(5"s(B 0) |
764 (?$(5"t(B 0) | |
765 (?$(5"u(B 0) | |
766 (?$(5"v(B 0) | |
767 (?$(5"w(B 0) | |
768 (?$(5"x(B 0) | |
769 (?$(5"y(B 0) | |
770 (?$(5"z(B 0) | |
771 (?$(5"{(B 0) | |
772 (?$(5"|(B 0) | |
773 (?$(5"}(B 0) | |
774 (?$(5"~(B 0) | |
775 (?$(5#!(B 0) | |
776 (?$(5#"(B 0) | |
777 (?$(5##(B 0) | |
778 (?$(5#$(B 0) | |
779 (?$(5#%(B 0) | |
780 (?$(5#&(B 0) | |
781 (?$(5#'(B 0) | |
782 (?$(5#((B 0) | |
783 (?$(5#)(B 0) | |
784 (?$(5#*(B 0) | |
785 (?$(5#+(B 0) | |
786 (?$(5#,(B 0) | |
787 (?$(5#-(B 0) | |
788 (?$(5#.(B 0) | |
789 (?$(5#/(B 0) | |
790 (?$(5#0(B 0) | |
791 (?$(5#1(B 0) | |
792 (?$(5#2(B 0) | |
793 (?$(5#3(B 0) | |
794 (?$(5#4(B 0) | |
795 (?$(5#5(B 0) | |
796 (?$(5#6(B 0) | |
797 (?$(5#7(B 0) | |
798 (?$(5#8(B 0) | |
799 (?$(5#9(B 0) | |
800 (?$(5#:(B 0) | |
801 (?$(5#;(B 0) | |
802 (?$(5#<(B 0) | |
803 (?$(5#=(B 0) | |
804 (?$(5#>(B 0) | |
805 (?$(5#?(B 0) | |
806 (?$(5#@(B 0) | |
807 (?$(5#A(B 0) | |
808 (?$(5#B(B 0) | |
809 (?$(5#C(B 0) | |
810 (?$(5#D(B 0) | |
811 (?$(5#E(B 0) | |
812 (?$(5#F(B 0) | |
813 (?$(5#G(B 0) | |
814 (?$(5#H(B 0) | |
815 (?$(5#I(B 0) | |
816 (?$(5#J(B 0) | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
817 (?$(5#K(B 40 (bc . tc)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
818 (?$(5#L(B 40 (bc . tc)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
819 (?$(5#M(B 40 (bc . tc)) |
17052 | 820 (?$(5#N(B 0) |
821 (?$(5#O(B 0) | |
822 (?$(5#P(B 0) | |
823 (?$(5#Q(B 0) | |
824 (?$(5#R(B 0) | |
825 (?$(5#S(B 0) | |
826 (?$(5#T(B 0) | |
827 (?$(5#U(B 0) | |
828 (?$(5#V(B 0) | |
829 (?$(5#W(B 0) | |
830 (?$(5#X(B 0) | |
831 (?$(5#Y(B 0) | |
832 (?$(5#Z(B 0) | |
833 (?$(5#[(B 0) | |
834 (?$(5#\(B 0) | |
835 (?$(5#](B 0) | |
836 (?$(5#^(B 0) | |
837 (?$(5#_(B 0) | |
838 (?$(5#`(B 0) | |
839 (?$(5#a(B 0) | |
840 (?$(5#b(B 0) | |
841 (?$(5#c(B 0) | |
842 (?$(5#d(B 0) | |
843 (?$(5#e(B 0) | |
844 (?$(5#f(B 0) | |
845 (?$(5#g(B 0) | |
846 (?$(5#h(B 0) | |
847 (?$(5#i(B 0) | |
848 (?$(5#j(B 0) | |
849 (?$(5#k(B 0) | |
850 (?$(5#l(B 0) | |
851 (?$(5#m(B 0) | |
852 (?$(5#n(B 0) | |
853 (?$(5#o(B 0) | |
854 (?$(5#p(B 0) | |
855 (?$(5#q(B 0) | |
856 (?$(5#r(B 0) | |
857 (?$(5#s(B 0) | |
858 (?$(5#t(B 0) | |
859 (?$(5#u(B 0) | |
860 (?$(5#v(B 0) | |
861 (?$(5#w(B 0) | |
862 (?$(5#x(B 0) | |
863 (?$(5#y(B 0) | |
864 (?$(5#z(B 0) | |
865 (?$(5#{(B 0) | |
866 (?$(5#|(B 0) | |
867 (?$(5#}(B 0) | |
868 (?$(5#~(B 0) | |
869 (?$(5$!(B 0) | |
870 (?$(5$"(B 0) | |
871 (?$(5$#(B 0) | |
872 (?$(5$$(B 0) | |
873 (?$(5$%(B 0) | |
874 (?$(5$&(B 0) | |
875 (?$(5$'(B 0) | |
876 (?$(5$((B 0) | |
877 (?$(5$)(B 0) | |
878 (?$(5$*(B 0) | |
879 (?$(5$+(B 0) | |
880 (?$(5$,(B 0) | |
881 (?$(5$-(B 0) | |
882 (?$(5$.(B 0) | |
883 (?$(5$/(B 0) | |
884 (?$(5$0(B 0) | |
885 (?$(5$1(B 0) | |
886 (?$(5$2(B 0) | |
887 (?$(5$3(B 0) | |
888 (?$(5$4(B 0) | |
889 (?$(5$5(B 0) | |
890 (?$(5$6(B 0) | |
891 (?$(5$7(B 0) | |
892 (?$(5$8(B 0) | |
893 (?$(5$9(B 0) | |
894 (?$(5$:(B 0) | |
895 (?$(5$;(B 0) | |
896 (?$(5$<(B 0) | |
897 (?$(5$=(B 0) | |
898 (?$(5$>(B 0) | |
899 (?$(5$?(B 0) | |
900 (?$(5$@(B 0) | |
901 (?$(5$A(B 0) | |
902 (?$(5$B(B 0) | |
903 (?$(5$C(B 0) | |
904 (?$(5$D(B 0) | |
905 (?$(5$E(B 0) | |
906 (?$(5$F(B 0) | |
907 (?$(5$G(B 0) | |
908 (?$(5$H(B 0) | |
909 (?$(5$I(B 0) | |
910 (?$(5$J(B 0) | |
911 (?$(5$K(B 0) | |
912 (?$(5$L(B 0) | |
913 (?$(5$M(B 0) | |
914 (?$(5$N(B 0) | |
915 (?$(5$O(B 0) | |
916 (?$(5$P(B 0) | |
917 (?$(5$Q(B 0) | |
918 (?$(5$R(B 0) | |
919 (?$(5$S(B 0) | |
920 (?$(5$T(B 0) | |
921 (?$(5$U(B 0) | |
922 (?$(5$V(B 0) | |
923 (?$(5$W(B 0) | |
924 (?$(5$X(B 0) | |
925 (?$(5$Y(B 0) | |
926 (?$(5$Z(B 0) | |
927 (?$(5$[(B 0) | |
928 (?$(5$\(B 0) | |
929 (?$(5$](B 0) | |
930 (?$(5$^(B 0) | |
931 (?$(5$_(B 0) | |
932 (?$(5$`(B 0) | |
933 (?$(5$a(B 0) | |
934 (?$(5$b(B 0) | |
935 (?$(5$c(B 0) | |
936 (?$(5$d(B 0) | |
937 (?$(5$e(B 0) | |
938 (?$(5$f(B 0) | |
939 (?$(5$g(B 0) | |
940 (?$(5$h(B 0) | |
941 (?$(5$i(B 0) | |
942 (?$(5$j(B 0) | |
943 (?$(5$k(B 0) | |
944 (?$(5$l(B 0) | |
945 (?$(5$m(B 0) | |
946 (?$(5$n(B 0) | |
947 (?$(5$o(B 0) | |
948 (?$(5$p(B 0) | |
949 (?$(5$q(B 0) | |
950 (?$(5$r(B 0) | |
951 (?$(5$s(B 0) | |
952 (?$(5$t(B 0) | |
953 (?$(5$u(B 0) | |
954 (?$(5$v(B 0) | |
955 (?$(5$w(B 0) | |
956 (?$(5$x(B 0) | |
957 (?$(5$y(B 0) | |
958 (?$(5$z(B 0) | |
959 (?$(5${(B 0) | |
960 (?$(5$|(B 0) | |
961 (?$(5$}(B 0) | |
962 (?$(5$~(B 0) | |
963 )) | |
964 | |
965 ;; Determine composition priority and rule of the array of Glyphs. | |
966 ;; Sort the glyphs with their priority. | |
967 | |
968 (defun devanagari-reorder-glyph-for-composition (glyph-alist) | |
969 (let* ((pos 0) | |
970 (ordered-glyphs '())) | |
971 (while (< pos (length glyph-alist)) | |
972 (let* ((glyph (aref glyph-alist pos))) | |
973 (setq pos (1+ pos)) | |
974 (setq ordered-glyphs | |
975 (append ordered-glyphs (list (assq glyph devanagari-composition-rules)))))) | |
976 (sort ordered-glyphs '(lambda (x y) (< (car (cdr x)) (car (cdr y))))))) | |
977 | |
978 ;;(devanagari-compose-to-one-glyph "$(5"5!X![(B") => "2$(6!XP"5@![1(B" | |
979 | |
980 (defun devanagari-compose-to-one-glyph (devanagari-string) | |
981 (let* ((o-glyph-list (devanagari-reorder-glyph-for-composition | |
982 (string-to-vector devanagari-string))) | |
983 ;; List of glyphs to be composed. | |
984 (cmp-glyph-list (list (car (car o-glyph-list)))) | |
985 (o-glyph-list (cdr o-glyph-list))) | |
986 (while o-glyph-list | |
987 (let* ((o-glyph (car o-glyph-list)) | |
988 (glyph (if (< 2 (length o-glyph)) | |
989 ;; default composition | |
990 (list (car (cdr (cdr o-glyph))) (car o-glyph)) | |
991 ;; composition with a specified rule | |
992 (list '(mr . ml) (car o-glyph))))) | |
993 (setq o-glyph-list (cdr o-glyph-list)) | |
994 (setq cmp-glyph-list (append cmp-glyph-list glyph)))) | |
995 ;; Before applying compose-chars, convert glyphs to | |
996 ;; 1-column width if possible. | |
997 (setq cmp-glyph-list (devanagari-wide-to-narrow cmp-glyph-list)) | |
998 (if (= (length cmp-glyph-list) 1) (char-to-string (car cmp-glyph-list)) | |
999 (apply 'compose-chars cmp-glyph-list)))) | |
1000 | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1001 ;; Utility function for Phase 2.5 |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1002 ;; Check whether given glyph is a Devanagari vertical modifier or not. |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1003 ;; If it is a vertical modifier, whether it should be 1-column shape or not |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1004 ;; depends on previous non-vertical modifier. |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1005 ; return nil if it is not vertical modifier. |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1006 (defun devanagari-vertical-modifier-p (glyph) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1007 (string-match (char-to-string glyph) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1008 "[$(5!]!^!_!`!a!b!c!h!i"p"q"r#K#L#M(B]")) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1009 |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1010 (defun devanagari-non-vertical-modifier-p (glyph) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1011 (string-match (char-to-string glyph) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1012 "[$(5!Z![!\!d!e!f!g(B]")) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1013 |
17052 | 1014 |
1015 ;; | |
1016 ;; Phase 2.5 Convert Appropriate Character to 1-column shape. | |
1017 ;; | |
1018 ;; This is temporary and should be removed out when Emacs supports | |
1019 ;; variable width characters. | |
1020 ;; | |
1021 ;; This will convert the composing glyphs (2 column glyphs) | |
1022 ;; to narrow (1 column) glyphs if they exist. | |
1023 ;; | |
1024 ;; devanagari-wide-to-narrow-old converts glyphs simply. | |
1025 ;; devanagari-wide-to-narrow takes care of upper/lower apply-glyphs | |
1026 ;; with 2 column base-glyph. | |
1027 ;; | |
1028 ;; Execution Examples | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1029 ;;(devanagari-wide-to-narrow '(?$(5!3(B (ml . ml) ?$(5!a(B)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1030 ;;(devanagari-wide-to-narrow '(?$(5!F(B (ml . ml) ?$(5!a(B)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1031 |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1032 ;(defun devanagari-wide-to-narrow (src-list) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1033 ; (if (null src-list) '() |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1034 ; (cons |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1035 ; (if (and (numberp (car src-list)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1036 ; (cdr (assq (car src-list) devanagari-1-column-char))) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1037 ; (cdr (assq (car src-list) devanagari-1-column-char)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1038 ; (car src-list)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1039 ; (devanagari-wide-to-narrow (cdr src-list))))) |
17052 | 1040 |
1041 (defun devanagari-wide-to-narrow (src-list) | |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1042 (devanagari-wide-to-narrow-iter src-list t)) |
17052 | 1043 |
17087
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1044 (defun devanagari-wide-to-narrow-iter (src-list wide-p) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1045 (let ((glyph (car src-list))) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1046 (cond ((null src-list) '()) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1047 ; not glyph code |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1048 ((not (numberp glyph)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1049 (cons glyph (devanagari-wide-to-narrow-iter (cdr src-list) wide-p))) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1050 ; vertical modifier glyph |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1051 ((devanagari-vertical-modifier-p glyph) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1052 (if (and (null wide-p) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1053 (cdr (assq glyph devanagari-1-column-char))) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1054 (cons (cdr (assq glyph devanagari-1-column-char)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1055 (devanagari-wide-to-narrow-iter (cdr src-list) nil)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1056 (cons glyph |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1057 (devanagari-wide-to-narrow-iter (cdr src-list) t)))) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1058 ; nonvertical modifier glyph |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1059 ((devanagari-non-vertical-modifier-p glyph) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1060 (if (cdr (assq glyph devanagari-1-column-char)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1061 (cons (cdr (assq glyph devanagari-1-column-char)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1062 (devanagari-wide-to-narrow-iter (cdr src-list) wide-p)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1063 (cons glyph |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1064 (devanagari-wide-to-narrow-iter (cdr src-list) wide-p)))) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1065 ; normal glyph |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1066 (t |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1067 (if (cdr (assq glyph devanagari-1-column-char)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1068 (cons (cdr (assq glyph devanagari-1-column-char)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1069 (devanagari-wide-to-narrow-iter (cdr src-list) nil)) |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1070 (cons glyph |
fb13faeea9aa
Fix handling of several characters.
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
1071 (devanagari-wide-to-narrow-iter (cdr src-list) t))))))) |
17052 | 1072 |
1073 | |
1074 ;; | |
1075 ;; Summary | |
1076 ;; | |
1077 | |
1078 ;;;###autoload | |
1079 (defun devanagari-compose-string (str) | |
1080 (let ((len (length str)) | |
1081 (src str) (dst "") rest match-b match-e) | |
1082 (while (string-match devanagari-composite-glyph-unit-examine src) | |
1083 (setq match-b (match-beginning 0) match-e (match-end 0)) | |
1084 (setq dst | |
1085 (concat dst | |
1086 (substring src 0 match-b) | |
1087 (devanagari-compose-to-one-glyph | |
1088 (char-to-glyph-devanagari | |
1089 (substring src match-b match-e))))) | |
1090 (setq src (substring src match-e))) | |
1091 (setq dst (concat dst src)) | |
1092 dst)) | |
1093 | |
1094 ;;;###autoload | |
1095 (defun devanagari-compose-region (from to) | |
1096 (interactive "r") | |
1097 (save-restriction | |
1098 (narrow-to-region from to) | |
1099 (goto-char (point-min)) | |
1100 (while (re-search-forward devanagari-composite-glyph-unit-examine nil t) | |
1101 (let* ((match-b (match-beginning 0)) (match-e (match-end 0)) | |
1102 (cmps (devanagari-compose-to-one-glyph | |
1103 (char-to-glyph-devanagari | |
1104 (buffer-substring match-b match-e))))) | |
1105 (delete-region match-b match-e) | |
1106 (insert cmps))))) | |
1107 | |
1108 ;; | |
1109 ;; Decomposition of composite font. | |
1110 ;; | |
1111 | |
1112 (defun devanagari-normalize-narrow-glyph (charlist) | |
1113 (let ((wide-char (car (rassoc (car charlist) devanagari-1-column-char)))) | |
1114 (if (null charlist) nil | |
1115 (cons (if (null wide-char) (car charlist) wide-char) | |
1116 (devanagari-normalize-narrow-glyph (cdr charlist)))))) | |
1117 | |
1118 (defvar devanagari-decomposition-rules | |
1119 '( | |
1120 (?$(5"p(B -20) | |
1121 ) | |
1122 ) | |
1123 | |
1124 (defun devanagari-reorder-glyph-for-decomposition (glyphlist) | |
1125 "This function re-orders glyph list." | |
1126 (sort glyphlist | |
1127 '(lambda (x y) | |
1128 (let ((xx (assoc x devanagari-decomposition-rules)) | |
1129 (yy (assoc y devanagari-decomposition-rules))) | |
1130 (if (null xx) (setq xx 0)) | |
1131 (if (null yy) (setq yy 0)) | |
1132 (< xx yy))))) | |
1133 | |
1134 (defun devanagari-decompose-char (char) | |
1135 "This function decomposes one Devanagari composite character to | |
1136 basic Devanagari character." | |
1137 (let ((glyphlist (decompose-composite-char char))) | |
1138 (if (not (listp glyphlist)) | |
1139 (setq glyphlist (list glyphlist))) | |
1140 (setq glyphlist (devanagari-normalize-narrow-glyph glyphlist)) | |
1141 (mapconcat '(lambda (x) (let ((char (get-char-code-property | |
1142 x 'glyph-to-char))) | |
1143 (if (null char) (char-to-string x) char))) | |
1144 (devanagari-reorder-glyph-for-decomposition glyphlist) | |
1145 ""))) | |
1146 | |
1147 ;;;###autoload | |
1148 (defun devanagari-decompose-string (str) | |
1149 "This function Decomposes Devanagari glyph string to | |
1150 basic Devanagari character string." | |
1151 (let ((src str) (dst "")) | |
1152 (while (not (equal src "")) | |
1153 (let* ((char (string-to-char src)) | |
1154 (clen (char-bytes char))) | |
1155 (setq src (substring src clen)) | |
1156 (setq dst (concat dst | |
1157 (devanagari-decompose-char char))))) | |
1158 dst)) | |
1159 | |
1160 ;;;###autoload | |
1161 (defun devanagari-decompose-region (from to) | |
1162 (interactive "r") | |
1163 (save-restriction | |
1164 (narrow-to-region from to) | |
1165 (goto-char (point-min)) | |
1166 (while (re-search-forward "." nil t) | |
1167 (let* ((match-b (match-beginning 0)) (match-e (match-end 0)) | |
1168 (decmps (devanagari-decompose-string (buffer-substring match-b match-e)))) | |
1169 (delete-char -1) | |
1170 (insert decmps))))) | |
1171 | |
1172 | |
1173 | |
1174 ;; For pre-write and post-read conversion | |
1175 | |
1176 ;;;###autoload | |
1177 (defun devanagari-compose-from-is13194-region (from to) | |
1178 "Compose IS 13194 characters in the region to Devanagari characters." | |
1179 (interactive "r") | |
1180 (save-restriction | |
1181 (narrow-to-region from to) | |
1182 (indian-to-devanagari-region (point-min) (point-max)) | |
1183 (devanagari-compose-region (point-min) (point-max)))) | |
1184 | |
1185 ;;;###autoload | |
1186 (defun devanagari-decompose-to-is13194-region (from to) | |
1187 "Decompose Devanagari characters in the region to IS 13194 characters." | |
1188 (interactive "r") | |
1189 (save-restriction | |
1190 (narrow-to-region from to) | |
1191 (devanagari-decompose-region (point-min) (point-max)) | |
1192 (devanagari-to-indian-region (point-min) (point-max)))) | |
1193 | |
1194 ;; | |
1195 (provide 'language/devan-util) | |
1196 | |
1197 ;;; Local Variables: | |
1198 ;;; generated-autoload-file: "../loaddefs.el" | |
1199 ;;; End: | |
1200 ;;; devan-util.el ends here |