1 ;;; thai-xtis.el --- Thai support for pre-composed font (for XTIS).
3 ;; Copyright (C) 1999 Electrotechnical Laboratory, JAPAN.
4 ;; Licensed to the Free Software Foundation.
6 ;; Author: TAKAHASHI Naoto <ntakahas@etl.go.jp>
7 ;; MORIOKA Tomohiko <tomo@etl.go.jp>
8 ;; Created: 1998-03-27 for Emacs-20.3 by TAKAHASHI Naoto
9 ;; 1999-03-29 imported and modified for XEmacs by MORIOKA Tomohiko
11 ;; Keywords: mule, multilingual, Thai, XTIS
13 ;; This file is part of XEmacs.
15 ;; XEmacs is free software; you can redistribute it and/or modify it
16 ;; under the terms of the GNU General Public License as published by
17 ;; the Free Software Foundation; either version 2, or (at your option)
20 ;; XEmacs is distributed in the hope that it will be useful, but
21 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 ;; General Public License for more details.
25 ;; You should have received a copy of the GNU General Public License
26 ;; along with XEmacs; see the file COPYING. If not, write to the Free
27 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
32 ;; For Thai, the pre-composed character set proposed by
33 ;; Virach Sornlertlamvanich <virach@links.nectec.or.th> is supported.
37 (when (featurep 'xemacs)
38 (make-charset 'thai-xtis "Precomposed Thai (XTIS by Virach)."
46 (modify-syntax-entry 'thai-xtis "w")
48 (define-category ?T "Precomposed Thai character.")
49 (modify-category-entry 'thai-xtis ?T)
52 ;; This is the ccl-decode-thai-xtis automaton.
54 ;; "WRITE x y" == (insert (make-char 'thai-xtis x y))
55 ;; "write x" == (insert x)
56 ;; rx' == (tis620-to-thai-xtis-second-byte-bitpattern rx)
57 ;; r3 == "no vower nor tone"
58 ;; r4 == (charset-id 'thai-xtis)
61 ;; state |--------------------------------------------
62 ;; | consonant | vowel | tone
63 ;; ---------+-------------+-------------+----------------
64 ;; r1 == 0 | r1 = r0 | WRITE r0,r3 | WRITE r0,r3
66 ;; ---------+-------------+-------------+----------------
67 ;; r1 == C | WRITE r1,r3 | r2 = r0' | WRITE r1,r3|r0'
68 ;; r2 == 0 | r1 = r0 | | r1 = 0
69 ;; ---------+-------------+-------------+----------------
70 ;; r1 == C | WRITE r1,r2 | WRITE r1,r2 | WRITE r1,r2|r0'
71 ;; r2 == V | r1 = r0 | WRITE r0,r3 | r1 = r2 = 0
72 ;; | r2 = 0 | r1 = r2 = 0 |
76 ;; state |-----------------------------------------
77 ;; | symbol | ASCII | EOF
78 ;; ---------+-------------+-------------+-------------
79 ;; r1 == 0 | WRITE r0,r3 | write r0 |
81 ;; ---------+-------------+-------------+-------------
82 ;; r1 == C | WRITE r1,r3 | WRITE r1,r3 | WRITE r1,r3
83 ;; r2 == 0 | WRITE r0,r3 | write r0 |
84 ;; | r1 = 0 | r1 = 0 |
85 ;; ---------+-------------+-------------+-------------
86 ;; r1 == C | WRITE r1,r2 | WRITE r1,r2 | WRITE r1,r2
87 ;; r2 == V | WRITE r0,r3 | write r0 |
88 ;; | r1 = r2 = 0 | r1 = r2 = 0 |
93 ;; input : r5 = 1st byte, r6 = 2nd byte
94 ;; Their values will be destroyed.
95 (define-ccl-program ccl-thai-xtis-write
97 ((r5 = ((r5 & #x7F) << 7))
98 (r6 = ((r6 & #x7F) | r5))
99 (write-multibyte-character r4 r6))))
101 (define-ccl-program ccl-thai-xtis-consonant
106 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write)
108 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
112 (define-ccl-program ccl-thai-xtis-vowel
115 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
117 (r2 = ((r0 - 204) << 3))
118 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
119 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
123 (define-ccl-program ccl-thai-xtis-vowel-d1
126 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
129 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
130 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
134 (define-ccl-program ccl-thai-xtis-vowel-ee
137 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
140 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
141 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
145 (define-ccl-program ccl-thai-xtis-tone
148 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
150 ((r5 = r1) (r6 = ((r0 - #xE6) | r3)) (call ccl-thai-xtis-write)
152 ((r5 = r1) (r6 = ((r0 - #xE6) | r2)) (call ccl-thai-xtis-write)
156 (define-ccl-program ccl-thai-xtis-symbol
159 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
161 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write)
162 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
164 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
165 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
169 (define-ccl-program ccl-thai-xtis-ascii
174 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write)
177 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
182 (define-ccl-program ccl-thai-xtis-eof
186 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write))
187 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write))))))
189 (define-ccl-program ccl-decode-thai-xtis
195 (r4 = ,(charset-id 'thai-xtis))
198 (call ccl-thai-xtis-ascii)
200 (call ccl-thai-xtis-consonant)
201 (call ccl-thai-xtis-consonant)
202 (call ccl-thai-xtis-consonant)
203 (call ccl-thai-xtis-consonant)
204 (call ccl-thai-xtis-consonant)
205 (call ccl-thai-xtis-consonant)
206 (call ccl-thai-xtis-consonant)
207 (call ccl-thai-xtis-consonant)
208 (call ccl-thai-xtis-consonant)
209 (call ccl-thai-xtis-consonant)
210 (call ccl-thai-xtis-consonant)
211 (call ccl-thai-xtis-consonant)
212 (call ccl-thai-xtis-consonant)
213 (call ccl-thai-xtis-consonant)
214 (call ccl-thai-xtis-consonant)
215 (call ccl-thai-xtis-consonant)
216 (call ccl-thai-xtis-consonant)
217 (call ccl-thai-xtis-consonant)
218 (call ccl-thai-xtis-consonant)
219 (call ccl-thai-xtis-consonant)
220 (call ccl-thai-xtis-consonant)
221 (call ccl-thai-xtis-consonant)
222 (call ccl-thai-xtis-consonant)
223 (call ccl-thai-xtis-consonant)
224 (call ccl-thai-xtis-consonant)
225 (call ccl-thai-xtis-consonant)
226 (call ccl-thai-xtis-consonant)
227 (call ccl-thai-xtis-consonant)
228 (call ccl-thai-xtis-consonant)
229 (call ccl-thai-xtis-consonant)
230 (call ccl-thai-xtis-consonant)
231 (call ccl-thai-xtis-consonant)
232 (call ccl-thai-xtis-consonant)
233 (call ccl-thai-xtis-consonant)
234 (call ccl-thai-xtis-consonant)
235 (call ccl-thai-xtis-symbol)
236 (call ccl-thai-xtis-consonant)
237 (call ccl-thai-xtis-symbol)
238 (call ccl-thai-xtis-consonant)
239 (call ccl-thai-xtis-consonant)
240 (call ccl-thai-xtis-consonant)
241 (call ccl-thai-xtis-consonant)
242 (call ccl-thai-xtis-consonant)
243 (call ccl-thai-xtis-consonant)
244 (call ccl-thai-xtis-consonant)
245 (call ccl-thai-xtis-consonant)
246 (call ccl-thai-xtis-symbol)
247 (call ccl-thai-xtis-symbol)
248 (call ccl-thai-xtis-vowel-d1)
249 (call ccl-thai-xtis-symbol)
250 (call ccl-thai-xtis-symbol)
251 (call ccl-thai-xtis-vowel)
252 (call ccl-thai-xtis-vowel)
253 (call ccl-thai-xtis-vowel)
254 (call ccl-thai-xtis-vowel)
255 (call ccl-thai-xtis-vowel)
256 (call ccl-thai-xtis-vowel)
257 (call ccl-thai-xtis-vowel)
262 (call ccl-thai-xtis-symbol)
263 (call ccl-thai-xtis-symbol)
264 (call ccl-thai-xtis-symbol)
265 (call ccl-thai-xtis-symbol)
266 (call ccl-thai-xtis-symbol)
267 (call ccl-thai-xtis-symbol)
268 (call ccl-thai-xtis-symbol)
269 (call ccl-thai-xtis-symbol)
270 (call ccl-thai-xtis-tone)
271 (call ccl-thai-xtis-tone)
272 (call ccl-thai-xtis-tone)
273 (call ccl-thai-xtis-tone)
274 (call ccl-thai-xtis-tone)
275 (call ccl-thai-xtis-tone)
276 (call ccl-thai-xtis-tone)
277 (call ccl-thai-xtis-vowel-ee)
278 (call ccl-thai-xtis-symbol)
279 (call ccl-thai-xtis-symbol)
280 (call ccl-thai-xtis-symbol)
281 (call ccl-thai-xtis-symbol)
282 (call ccl-thai-xtis-symbol)
283 (call ccl-thai-xtis-symbol)
284 (call ccl-thai-xtis-symbol)
285 (call ccl-thai-xtis-symbol)
286 (call ccl-thai-xtis-symbol)
287 (call ccl-thai-xtis-symbol)
288 (call ccl-thai-xtis-symbol)
289 (call ccl-thai-xtis-symbol)
290 (call ccl-thai-xtis-symbol)
297 (call ccl-thai-xtis-eof)))
301 (defconst leading-code-private-21 #x9F)
303 (define-ccl-program ccl-encode-thai-xtis
307 (if (r0 == ,leading-code-private-21)
309 (if (r1 == ,(charset-id 'thai-xtis))
314 (r0 = ((r0 - #xB0) >> 3))
316 (write r0 [0 209 212 213 214 215 216 217 218 238]))
318 (write r1 [0 231 232 233 234 235 236 237]))
324 (write-read-repeat r0))))))
326 (if (featurep 'xemacs)
329 "external=tis620, internal=thai-xtis"
331 decode ,ccl-decode-thai-xtis
332 encode ,ccl-encode-thai-xtis))
334 'tis-620 4 ?T "external=tis620, internal=thai-xtis"
335 '(ccl-decode-thai-xtis . ccl-encode-thai-xtis)
336 '((safe-charsets . t)))
340 (set-language-info-alist
342 '((setup-function . setup-thai-xtis-environment)
343 (exit-function . exit-thai-xtis-environment)
345 (coding-system tis-620 iso-2022-7bit)
346 (coding-priority tis-620 iso-2022-7bit)
347 (sample-text . "
\e$(?!:
\e(B")
348 (documentation . t)))
350 ;; thai-xtis.el ends here.