comparison lisp/mule/thai-util.el @ 771:943eaba38521

[xemacs-hg @ 2002-03-13 08:51:24 by ben] The big ben-mule-21-5 check-in! Various files were added and deleted. See CHANGES-ben-mule. There are still some test suite failures. No crashes, though. Many of the failures have to do with problems in the test suite itself rather than in the actual code. I'll be addressing these in the next day or so -- none of the test suite failures are at all critical. Meanwhile I'll be trying to address the biggest issues -- i.e. build or run failures, which will almost certainly happen on various platforms. All comments should be sent to ben@xemacs.org -- use a Cc: if necessary when sending to mailing lists. There will be pre- and post- tags, something like pre-ben-mule-21-5-merge-in, and post-ben-mule-21-5-merge-in.
author ben
date Wed, 13 Mar 2002 08:54:06 +0000
parents
children 2923009caf47
comparison
equal deleted inserted replaced
770:336a418893b5 771:943eaba38521
1 ;;; thai-util.el --- utilities for Thai -*- coding: iso-2022-7bit; -*-
2
3 ;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
4 ;; Licensed to the Free Software Foundation.
5
6 ;; Keywords: mule, multilingual, thai
7
8 ;; This file is part of XEmacs.
9
10 ;; XEmacs is free software; you can redistribute it and/or modify it
11 ;; 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 ;; XEmacs is distributed in the hope that it will be useful, but
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 ;; General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with XEmacs; see the file COPYING. If not, write to the Free
22 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
23 ;; 02111-1307, USA.
24
25 ;;; Synched up with: Emacs 21.0.103 (language/thai-util.el).
26
27 ;;; Code:
28
29 ;; Setting information of Thai characters.
30
31 (defconst thai-category-table (make-category-table))
32 (define-category ?c "Thai consonant" thai-category-table)
33 (define-category ?v "Thai upper/lower vowel" thai-category-table)
34 (define-category ?t "Thai tone" thai-category-table)
35
36 ;; The general composing rules are as follows:
37 ;;
38 ;; T
39 ;; V T V T
40 ;; CV -> C, CT -> C, CVT -> C, Cv -> C, CvT -> C
41 ;; v v
42 ;;
43 ;; where C: consonant, V: vowel upper, v: vowel lower, T: tone mark.
44
45 (defvar thai-composition-pattern "\\cc\\(\\ct\\|\\cv\\ct?\\)"
46 "Regular expression matching a Thai composite sequence.")
47
48 (let ((l '((?,T!(B consonant "LETTER KO KAI") ; 0xA1
49 (?,T"(B consonant "LETTER KHO KHAI") ; 0xA2
50 (?,T#(B consonant "LETTER KHO KHUAT") ; 0xA3
51 (?,T$(B consonant "LETTER KHO KHWAI") ; 0xA4
52 (?,T%(B consonant "LETTER KHO KHON") ; 0xA5
53 (?,T&(B consonant "LETTER KHO RAKHANG") ; 0xA6
54 (?,T'(B consonant "LETTER NGO NGU") ; 0xA7
55 (?,T((B consonant "LETTER CHO CHAN") ; 0xA8
56 (?,T)(B consonant "LETTER CHO CHING") ; 0xA9
57 (?,T*(B consonant "LETTER CHO CHANG") ; 0xAA
58 (?,T+(B consonant "LETTER SO SO") ; 0xAB
59 (?,T,(B consonant "LETTER CHO CHOE") ; 0xAC
60 (?,T-(B consonant "LETTER YO YING") ; 0xAD
61 (?,T.(B consonant "LETTER DO CHADA") ; 0xAE
62 (?,T/(B consonant "LETTER TO PATAK") ; 0xAF
63 (?,T0(B consonant "LETTER THO THAN") ; 0xB0
64 (?,T1(B consonant "LETTER THO NANGMONTHO") ; 0xB1
65 (?,T2(B consonant "LETTER THO PHUTHAO") ; 0xB2
66 (?,T3(B consonant "LETTER NO NEN") ; 0xB3
67 (?,T4(B consonant "LETTER DO DEK") ; 0xB4
68 (?,T5(B consonant "LETTER TO TAO") ; 0xB5
69 (?,T6(B consonant "LETTER THO THUNG") ; 0xB6
70 (?,T7(B consonant "LETTER THO THAHAN") ; 0xB7
71 (?,T8(B consonant "LETTER THO THONG") ; 0xB8
72 (?,T9(B consonant "LETTER NO NU") ; 0xB9
73 (?,T:(B consonant "LETTER BO BAIMAI") ; 0xBA
74 (?,T;(B consonant "LETTER PO PLA") ; 0xBB
75 (?,T<(B consonant "LETTER PHO PHUNG") ; 0xBC
76 (?,T=(B consonant "LETTER FO FA") ; 0xBD
77 (?,T>(B consonant "LETTER PHO PHAN") ; 0xBE
78 (?,T?(B consonant "LETTER FO FAN") ; 0xBF
79 (?,T@(B consonant "LETTER PHO SAMPHAO") ; 0xC0
80 (?,TA(B consonant "LETTER MO MA") ; 0xC1
81 (?,TB(B consonant "LETTER YO YAK") ; 0xC2
82 (?,TC(B consonant "LETTER RO RUA") ; 0xC3
83 (?,TD(B vowel-base "LETTER RU (Pali vowel letter)") ; 0xC4
84 (?,TE(B consonant "LETTER LO LING") ; 0xC5
85 (?,TF(B vowel-base "LETTER LU (Pali vowel letter)") ; 0xC6
86 (?,TG(B consonant "LETTER WO WAEN") ; 0xC7
87 (?,TH(B consonant "LETTER SO SALA") ; 0xC8
88 (?,TI(B consonant "LETTER SO RUSI") ; 0xC9
89 (?,TJ(B consonant "LETTER SO SUA") ; 0xCA
90 (?,TK(B consonant "LETTER HO HIP") ; 0xCB
91 (?,TL(B consonant "LETTER LO CHULA") ; 0xCC
92 (?,TM(B consonant "LETTER O ANG") ; 0xCD
93 (?,TN(B consonant "LETTER HO NOK HUK") ; 0xCE
94 (?,TO(B special "PAI YAN NOI (abbreviation)") ; 0xCF
95 (?,TP(B vowel-base "VOWEL SIGN SARA A") ; 0xD0
96 (?,TQ(B vowel-upper "VOWEL SIGN MAI HAN-AKAT N/S-T") ; 0xD1
97 (?,TR(B vowel-base "VOWEL SIGN SARA AA") ; 0xD2
98 (?,TS(B vowel-base "VOWEL SIGN SARA AM") ; 0xD3
99 (?,TT(B vowel-upper "VOWEL SIGN SARA I N/S-T") ; 0xD4
100 (?,TU(B vowel-upper "VOWEL SIGN SARA II N/S-T") ; 0xD5
101 (?,TV(B vowel-upper "VOWEL SIGN SARA UE N/S-T") ; 0xD6
102 (?,TW(B vowel-upper "VOWEL SIGN SARA UEE N/S-T") ; 0xD7
103 (?,TX(B vowel-lower "VOWEL SIGN SARA U N/S-B") ; 0xD8
104 (?,TY(B vowel-lower "VOWEL SIGN SARA UU N/S-B") ; 0xD9
105 (?,TZ(B vowel-lower "VOWEL SIGN PHINTHU N/S-B (Pali virama)") ; 0xDA
106 (?,T[(B invalid nil) ; 0xDA
107 (?,T\(B invalid nil) ; 0xDC
108 (?,T](B invalid nil) ; 0xDC
109 (?,T^(B invalid nil) ; 0xDC
110 (?,T_(B special "BAHT SIGN (currency symbol)") ; 0xDF
111 (?,T`(B vowel-base "VOWEL SIGN SARA E") ; 0xE0
112 (?,Ta(B vowel-base "VOWEL SIGN SARA AE") ; 0xE1
113 (?,Tb(B vowel-base "VOWEL SIGN SARA O") ; 0xE2
114 (?,Tc(B vowel-base "VOWEL SIGN SARA MAI MUAN") ; 0xE3
115 (?,Td(B vowel-base "VOWEL SIGN SARA MAI MALAI") ; 0xE4
116 (?,Te(B vowel-base "LAK KHANG YAO") ; 0xE5
117 (?,Tf(B special "MAI YAMOK (repetion)") ; 0xE6
118 (?,Tg(B vowel-upper "VOWEL SIGN MAI TAI KHU N/S-T") ; 0xE7
119 (?,Th(B tone "TONE MAI EK N/S-T") ; 0xE8
120 (?,Ti(B tone "TONE MAI THO N/S-T") ; 0xE9
121 (?,Tj(B tone "TONE MAI TRI N/S-T") ; 0xEA
122 (?,Tk(B tone "TONE MAI CHATTAWA N/S-T") ; 0xEB
123 (?,Tl(B tone "THANTHAKHAT N/S-T (cancellation mark)") ; 0xEC
124 (?,Tm(B tone "NIKKHAHIT N/S-T (final nasal)") ; 0xED
125 (?,Tn(B vowel-upper "YAMAKKAN N/S-T") ; 0xEE
126 (?,To(B special "FONRMAN") ; 0xEF
127 (?,Tp(B special "DIGIT ZERO") ; 0xF0
128 (?,Tq(B special "DIGIT ONE") ; 0xF1
129 (?,Tr(B special "DIGIT TWO") ; 0xF2
130 (?,Ts(B special "DIGIT THREE") ; 0xF3
131 (?,Tt(B special "DIGIT FOUR") ; 0xF4
132 (?,Tu(B special "DIGIT FIVE") ; 0xF5
133 (?,Tv(B special "DIGIT SIX") ; 0xF6
134 (?,Tw(B special "DIGIT SEVEN") ; 0xF7
135 (?,Tx(B special "DIGIT EIGHT") ; 0xF8
136 (?,Ty(B special "DIGIT NINE") ; 0xF9
137 (?,Tz(B special "ANGKHANKHU (ellipsis)") ; 0xFA
138 (?,T{(B special "KHOMUT (beginning of religious texts)") ; 0xFB
139 (?,T|(B invalid nil) ; 0xFC
140 (?,T}(B invalid nil) ; 0xFD
141 (?,T~(B invalid nil) ; 0xFE
142 ))
143 elm)
144 (while l
145 (setq elm (car l) l (cdr l))
146 (let ((char (car elm))
147 (ptype (nth 1 elm)))
148 (put-char-code-property char 'phonetic-type ptype)
149 (cond ((eq ptype 'consonant)
150 (modify-category-entry char ?c thai-category-table))
151 ((memq ptype '(vowel-upper vowel-lower))
152 (modify-category-entry char ?v thai-category-table))
153 ((eq ptype 'tone)
154 (modify-category-entry char ?t thai-category-table)))
155 (put-char-code-property char 'name (nth 2 elm)))))
156
157 ;;;###autoload
158 (defun thai-compose-region (beg end)
159 "Compose Thai characters in the region.
160 When called from a program, expects two arguments,
161 positions (integers or markers) specifying the region."
162 (interactive "r")
163 (save-restriction
164 (narrow-to-region beg end)
165 (goto-char (point-min))
166 (with-category-table thai-category-table
167 (while (re-search-forward thai-composition-pattern nil t)
168 (compose-region (match-beginning 0) (match-end 0))))))
169
170 ;;;###autoload
171 (defun thai-compose-string (string)
172 "Compose Thai characters in STRING and return the resulting string."
173 (with-category-table thai-category-table
174 (let ((idx 0))
175 (while (setq idx (string-match thai-composition-pattern string idx))
176 (compose-string string idx (match-end 0))
177 (setq idx (match-end 0)))))
178 string)
179
180 ;;;###autoload
181 (defun thai-compose-buffer ()
182 "Compose Thai characters in the current buffer."
183 (interactive)
184 (thai-compose-region (point-min) (point-max)))
185
186 ;;;###autoload
187 (defun thai-post-read-conversion (len)
188 (thai-compose-region (point) (+ (point) len))
189 len)
190
191 ;;;###autoload
192 (defun thai-composition-function (from to pattern &optional string)
193 "Compose Thai text in the region FROM and TO.
194 The text matches the regular expression PATTERN.
195 Optional 4th argument STRING, if non-nil, is a string containing text
196 to compose.
197
198 The return value is number of composed characters."
199 (if (< (1+ from) to)
200 (prog1 (- to from)
201 (if string
202 (compose-string string from to)
203 (compose-region from to))
204 (- to from))))
205
206 ;;
207 (provide 'thai-util)
208
209 ;;; thai-util.el ends here