1 ;;; thai-xtis.el --- Support for Thai (XTIS) -*- coding: iso-2022-7bit; -*-
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 SXEmacs.
15 ;; SXEmacs is free software: you can redistribute it and/or modify
16 ;; it under the terms of the GNU General Public License as published by
17 ;; the Free Software Foundation, either version 3 of the License, or
18 ;; (at your option) any later version.
20 ;; SXEmacs is distributed in the hope that it will be useful,
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 ;; GNU General Public License for more details.
25 ;; You should have received a copy of the GNU General Public License
26 ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
30 ;; For Thai, the pre-composed character set proposed by
31 ;; Virach Sornlertlamvanich <virach@links.nectec.or.th> is supported.
34 (eval-when-compile (require 'ccl))
36 (when (featurep 'xemacs)
37 (let ((deflist '(;; chars syntax
38 ("
\e$(?!0
\e(B-
\e$(?NxP0R0S0`0
\e(B-
\e$(?e0
\e(B" "w")
39 ("
\e$(?p0
\e(B-
\e$(?y0
\e(B" "w")
40 ("
\e$(?O0f0_0o0z0{0
\e(B" "_")
42 elm chars len syntax to ch i)
44 (setq elm (car deflist))
50 (if (= (aref chars i) ?-)
52 to (nth 1 (split-char (aref chars i))))
53 (setq ch (nth 1 (split-char (aref chars i)))
56 (modify-syntax-entry (vector 'thai-xtis ch) syntax)
59 (setq deflist (cdr deflist))))
61 (put-charset-property 'thai-xtis 'preferred-coding-system 'tis-620)
64 ;; This is the ccl-decode-thai-xtis automaton.
66 ;; "WRITE x y" == (insert (make-char 'thai-xtis x y))
67 ;; "write x" == (insert x)
68 ;; rx' == (tis620-to-thai-xtis-second-byte-bitpattern rx)
69 ;; r3 == "no vower nor tone"
70 ;; r4 == (charset-id 'thai-xtis)
73 ;; state |--------------------------------------------
74 ;; | consonant | vowel | tone
75 ;; ---------+-------------+-------------+----------------
76 ;; r1 == 0 | r1 = r0 | WRITE r0,r3 | WRITE r0,r3
78 ;; ---------+-------------+-------------+----------------
79 ;; r1 == C | WRITE r1,r3 | r2 = r0' | WRITE r1,r3|r0'
80 ;; r2 == 0 | r1 = r0 | | r1 = 0
81 ;; ---------+-------------+-------------+----------------
82 ;; r1 == C | WRITE r1,r2 | WRITE r1,r2 | WRITE r1,r2|r0'
83 ;; r2 == V | r1 = r0 | WRITE r0,r3 | r1 = r2 = 0
84 ;; | r2 = 0 | r1 = r2 = 0 |
88 ;; state |-----------------------------------------
89 ;; | symbol | ASCII | EOF
90 ;; ---------+-------------+-------------+-------------
91 ;; r1 == 0 | WRITE r0,r3 | write r0 |
93 ;; ---------+-------------+-------------+-------------
94 ;; r1 == C | WRITE r1,r3 | WRITE r1,r3 | WRITE r1,r3
95 ;; r2 == 0 | WRITE r0,r3 | write r0 |
96 ;; | r1 = 0 | r1 = 0 |
97 ;; ---------+-------------+-------------+-------------
98 ;; r1 == C | WRITE r1,r2 | WRITE r1,r2 | WRITE r1,r2
99 ;; r2 == V | WRITE r0,r3 | write r0 |
100 ;; | r1 = r2 = 0 | r1 = r2 = 0 |
105 ;; input : r5 = 1st byte, r6 = 2nd byte
106 ;; Their values will be destroyed.
107 (define-ccl-program ccl-thai-xtis-write
109 ((r5 = ((r5 & #x7F) << 7))
110 (r6 = ((r6 & #x7F) | r5))
111 (write-multibyte-character r4 r6))))
113 (define-ccl-program ccl-thai-xtis-consonant
118 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write)
120 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
124 (define-ccl-program ccl-thai-xtis-vowel
127 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
129 (r2 = ((r0 - 204) << 3))
130 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
131 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
135 (define-ccl-program ccl-thai-xtis-vowel-d1
138 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
141 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
142 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
146 (define-ccl-program ccl-thai-xtis-vowel-ee
149 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
152 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
153 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
157 (define-ccl-program ccl-thai-xtis-tone
160 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
162 ((r5 = r1) (r6 = ((r0 - #xE6) | r3)) (call ccl-thai-xtis-write)
164 ((r5 = r1) (r6 = ((r0 - #xE6) | r2)) (call ccl-thai-xtis-write)
168 (define-ccl-program ccl-thai-xtis-symbol
171 ((r5 = r0) (r6 = r3) (call ccl-thai-xtis-write))
173 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write)
174 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
176 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
177 (r5 = r0) (r6 = r3) (call ccl-thai-xtis-write)
181 (define-ccl-program ccl-thai-xtis-ascii
186 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write)
189 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write)
194 (define-ccl-program ccl-thai-xtis-eof
198 ((r5 = r1) (r6 = r3) (call ccl-thai-xtis-write))
199 ((r5 = r1) (r6 = r2) (call ccl-thai-xtis-write))))))
201 (define-ccl-program ccl-decode-thai-xtis
207 (r4 = ,(charset-id 'thai-xtis))
210 (call ccl-thai-xtis-ascii)
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-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-symbol)
248 (call ccl-thai-xtis-consonant)
249 (call ccl-thai-xtis-symbol)
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-symbol)
259 (call ccl-thai-xtis-symbol)
260 (call ccl-thai-xtis-vowel-d1)
261 (call ccl-thai-xtis-symbol)
262 (call ccl-thai-xtis-symbol)
263 (call ccl-thai-xtis-vowel)
264 (call ccl-thai-xtis-vowel)
265 (call ccl-thai-xtis-vowel)
266 (call ccl-thai-xtis-vowel)
267 (call ccl-thai-xtis-vowel)
268 (call ccl-thai-xtis-vowel)
269 (call ccl-thai-xtis-vowel)
274 (call ccl-thai-xtis-symbol)
275 (call ccl-thai-xtis-symbol)
276 (call ccl-thai-xtis-symbol)
277 (call ccl-thai-xtis-symbol)
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-tone)
283 (call ccl-thai-xtis-tone)
284 (call ccl-thai-xtis-tone)
285 (call ccl-thai-xtis-tone)
286 (call ccl-thai-xtis-tone)
287 (call ccl-thai-xtis-tone)
288 (call ccl-thai-xtis-tone)
289 (call ccl-thai-xtis-vowel-ee)
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-symbol)
297 (call ccl-thai-xtis-symbol)
298 (call ccl-thai-xtis-symbol)
299 (call ccl-thai-xtis-symbol)
300 (call ccl-thai-xtis-symbol)
301 (call ccl-thai-xtis-symbol)
302 (call ccl-thai-xtis-symbol)
309 (call ccl-thai-xtis-eof)))
313 (defconst leading-code-private-21 #x9F)
315 (define-ccl-program ccl-encode-thai-xtis
319 (if (r0 == ,leading-code-private-21)
321 (if (r1 == ,(charset-id 'thai-xtis))
326 (r0 = ((r0 - #xB0) >> 3))
328 (write r0 [0 209 212 213 214 215 216 217 218 238]))
330 (write r1 [0 231 232 233 234 235 236 237]))
336 (write-read-repeat r0))))))
338 (if (featurep 'xemacs)
342 "external=tis620, internal=thai-xtis"
344 decode ccl-decode-thai-xtis
345 encode ccl-encode-thai-xtis))
346 (coding-system-put 'tis-620 'category 'iso-8-1))
348 'tis-620 4 ?T "external=tis620, internal=thai-xtis"
349 '(ccl-decode-thai-xtis . ccl-encode-thai-xtis)
350 '((safe-charsets . t)))
354 (set-language-info-alist
356 '((charset thai-xtis)
357 (coding-system tis-620 iso-2022-7bit)
358 (tutorial . "TUTORIAL.th")
359 (tutorial-coding-system . tis-620)
360 (coding-priority tis-620 iso-2022-7bit)
361 (sample-text . "
\e$(?!:
\e(B")
362 (documentation . t)))
364 ;; thai-xtis.el ends here.