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 ?x "Precomposed Thai character.")
49 (modify-category-entry 'thai-xtis ?x)
51 (let ((deflist '(;; chars syntax
52 ("
\e$(?!0
\e(B-
\e$(?NxP0R0S0`0
\e(B-
\e$(?e0
\e(B" "w")
53 ("
\e$(?p0
\e(B-
\e$(?y0
\e(B" "w")
54 ("
\e$(?O0f0_0o0z0{0
\e(B" "_")
56 elm chars len syntax category to ch i)
58 (setq elm (car deflist))
64 (if (= (aref chars i) ?-)
66 to (nth 1 (split-char (aref chars i))))
67 (setq ch (nth 1 (split-char (aref chars i)))
70 (modify-syntax-entry (vector 'thai-xtis ch) syntax)
73 (setq deflist (cdr deflist))))
75 (put-charset-property 'thai-xtis 'preferred-coding-system 'tis-620)
78 ;; This is the ccl-decode-thai-xtis automaton.
80 ;; "WRITE x y" == (insert (make-char 'thai-xtis x y))
81 ;; "write x" == (insert x)
82 ;; rx' == (tis620-to-thai-xtis-second-byte-bitpattern rx)
83 ;; r3 == "no vower nor tone"
84 ;; r4 == (charset-id 'thai-xtis)
87 ;; state |--------------------------------------------
88 ;; | consonant | vowel | tone
89 ;; ---------+-------------+-------------+----------------
90 ;; r1 == 0 | r1 = r0 | WRITE r0,r3 | WRITE r0,r3
92 ;; ---------+-------------+-------------+----------------
93 ;; r1 == C | WRITE r1,r3 | r2 = r0' | WRITE r1,r3|r0'
94 ;; r2 == 0 | r1 = r0 | | r1 = 0
95 ;; ---------+-------------+-------------+----------------
96 ;; r1 == C | WRITE r1,r2 | WRITE r1,r2 | WRITE r1,r2|r0'
97 ;; r2 == V | r1 = r0 | WRITE r0,r3 | r1 = r2 = 0
98 ;; | r2 = 0 | r1 = r2 = 0 |
102 ;; state |-----------------------------------------
103 ;; | symbol | ASCII | EOF
104 ;; ---------+-------------+-------------+-------------
105 ;; r1 == 0 | WRITE r0,r3 | write r0 |
107 ;; ---------+-------------+-------------+-------------
108 ;; r1 == C | WRITE r1,r3 | WRITE r1,r3 | WRITE r1,r3
109 ;; r2 == 0 | WRITE r0,r3 | write r0 |
110 ;; | r1 = 0 | r1 = 0 |
111 ;; ---------+-------------+-------------+-------------
112 ;; r1 == C | WRITE r1,r2 | WRITE r1,r2 | WRITE r1,r2
113 ;; r2 == V | WRITE r0,r3 | write r0 |
114 ;; | r1 = r2 = 0 | r1 = r2 = 0 |
119 ;; input : r5 = 1st byte, r6 = 2nd byte
120 ;; Their values will be destroyed.
121 (define-ccl-program ccl-thai-xtis-write
123 ((r5 = ((r5 & #x7F) << 7))
124 (r6 = ((r6 & #x7F) | r5))
125 (write-multibyte-character r4 r6))))
127 (define-ccl-program ccl-thai-xtis-consonant
132 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write)
134 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
138 (define-ccl-program ccl-thai-xtis-vowel
141 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
143 (r2 = ((r0 - 204) << 3))
144 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
145 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
149 (define-ccl-program ccl-thai-xtis-vowel-d1
152 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
155 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
156 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
160 (define-ccl-program ccl-thai-xtis-vowel-ee
163 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
166 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
167 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
171 (define-ccl-program ccl-thai-xtis-tone
174 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
176 ((r5 = r1) (r6 = ((r0 - #xE6) | r3)) (call ccl-thai-xtis-write)
178 ((r5 = r1) (r6 = ((r0 - #xE6) | r2)) (call ccl-thai-xtis-write)
182 (define-ccl-program ccl-thai-xtis-symbol
185 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
187 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write)
188 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
190 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
191 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
195 (define-ccl-program ccl-thai-xtis-ascii
200 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write)
203 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
208 (define-ccl-program ccl-thai-xtis-eof
212 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write))
213 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write))))))
215 (define-ccl-program ccl-decode-thai-xtis
221 (r4 = ,(charset-id 'thai-xtis))
224 (call ccl-thai-xtis-ascii)
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-consonant)
236 (call ccl-thai-xtis-consonant)
237 (call ccl-thai-xtis-consonant)
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-consonant)
247 (call ccl-thai-xtis-consonant)
248 (call ccl-thai-xtis-consonant)
249 (call ccl-thai-xtis-consonant)
250 (call ccl-thai-xtis-consonant)
251 (call ccl-thai-xtis-consonant)
252 (call ccl-thai-xtis-consonant)
253 (call ccl-thai-xtis-consonant)
254 (call ccl-thai-xtis-consonant)
255 (call ccl-thai-xtis-consonant)
256 (call ccl-thai-xtis-consonant)
257 (call ccl-thai-xtis-consonant)
258 (call ccl-thai-xtis-consonant)
259 (call ccl-thai-xtis-consonant)
260 (call ccl-thai-xtis-consonant)
261 (call ccl-thai-xtis-symbol)
262 (call ccl-thai-xtis-consonant)
263 (call ccl-thai-xtis-symbol)
264 (call ccl-thai-xtis-consonant)
265 (call ccl-thai-xtis-consonant)
266 (call ccl-thai-xtis-consonant)
267 (call ccl-thai-xtis-consonant)
268 (call ccl-thai-xtis-consonant)
269 (call ccl-thai-xtis-consonant)
270 (call ccl-thai-xtis-consonant)
271 (call ccl-thai-xtis-consonant)
272 (call ccl-thai-xtis-symbol)
273 (call ccl-thai-xtis-symbol)
274 (call ccl-thai-xtis-vowel-d1)
275 (call ccl-thai-xtis-symbol)
276 (call ccl-thai-xtis-symbol)
277 (call ccl-thai-xtis-vowel)
278 (call ccl-thai-xtis-vowel)
279 (call ccl-thai-xtis-vowel)
280 (call ccl-thai-xtis-vowel)
281 (call ccl-thai-xtis-vowel)
282 (call ccl-thai-xtis-vowel)
283 (call ccl-thai-xtis-vowel)
288 (call ccl-thai-xtis-symbol)
289 (call ccl-thai-xtis-symbol)
290 (call ccl-thai-xtis-symbol)
291 (call ccl-thai-xtis-symbol)
292 (call ccl-thai-xtis-symbol)
293 (call ccl-thai-xtis-symbol)
294 (call ccl-thai-xtis-symbol)
295 (call ccl-thai-xtis-symbol)
296 (call ccl-thai-xtis-tone)
297 (call ccl-thai-xtis-tone)
298 (call ccl-thai-xtis-tone)
299 (call ccl-thai-xtis-tone)
300 (call ccl-thai-xtis-tone)
301 (call ccl-thai-xtis-tone)
302 (call ccl-thai-xtis-tone)
303 (call ccl-thai-xtis-vowel-ee)
304 (call ccl-thai-xtis-symbol)
305 (call ccl-thai-xtis-symbol)
306 (call ccl-thai-xtis-symbol)
307 (call ccl-thai-xtis-symbol)
308 (call ccl-thai-xtis-symbol)
309 (call ccl-thai-xtis-symbol)
310 (call ccl-thai-xtis-symbol)
311 (call ccl-thai-xtis-symbol)
312 (call ccl-thai-xtis-symbol)
313 (call ccl-thai-xtis-symbol)
314 (call ccl-thai-xtis-symbol)
315 (call ccl-thai-xtis-symbol)
316 (call ccl-thai-xtis-symbol)
323 (call ccl-thai-xtis-eof)))
327 (defconst leading-code-private-21 #x9F)
329 (define-ccl-program ccl-encode-thai-xtis
333 (if (r0 == ,leading-code-private-21)
335 (if (r1 == ,(charset-id 'thai-xtis))
340 (r0 = ((r0 - #xB0) >> 3))
342 (write r0 [0 209 212 213 214 215 216 217 218 238]))
344 (write r1 [0 231 232 233 234 235 236 237]))
350 (write-read-repeat r0))))))
352 (if (featurep 'xemacs)
355 "external=tis620, internal=thai-xtis"
357 decode ,ccl-decode-thai-xtis
358 encode ,ccl-encode-thai-xtis))
360 'tis-620 4 ?T "external=tis620, internal=thai-xtis"
361 '(ccl-decode-thai-xtis . ccl-encode-thai-xtis)
362 '((safe-charsets . t)))
366 (set-language-info-alist
368 '((setup-function . setup-thai-xtis-environment)
369 (exit-function . exit-thai-xtis-environment)
371 (coding-system tis-620 iso-2022-7bit)
372 (coding-priority tis-620 iso-2022-7bit)
373 (sample-text . "
\e$(?!:
\e(B")
374 (documentation . t)))
376 ;; thai-xtis.el ends here.