35 |
|
|
36 |
(make-coding-system |
(make-coding-system |
37 |
'iso-2022-cn 2 ?C |
'iso-2022-cn 2 ?C |
38 |
"ISO 2022 based 7bit encoding for Chinese GB and CNS (MIME:ISO-2022-CN)" |
"ISO 2022 based 7bit encoding for Chinese GB and CNS (MIME:ISO-2022-CN)." |
39 |
'(ascii |
'(ascii |
40 |
(nil chinese-gb2312 chinese-cns11643-1) |
(nil chinese-gb2312 chinese-cns11643-1) |
41 |
(nil chinese-cns11643-2) |
(nil chinese-cns11643-2) |
49 |
|
|
50 |
(make-coding-system |
(make-coding-system |
51 |
'iso-2022-cn-ext 2 ?C |
'iso-2022-cn-ext 2 ?C |
52 |
"ISO 2022 based 7bit encoding for Chinese GB and CNS (MIME:ISO-2022-CN-EXT)" |
"ISO 2022 based 7bit encoding for Chinese GB and CNS (MIME:ISO-2022-CN-EXT)." |
53 |
'(ascii |
'(ascii |
54 |
(nil chinese-gb2312 chinese-cns11643-1) |
(nil chinese-gb2312 chinese-cns11643-1) |
55 |
(nil chinese-cns11643-2) |
(nil chinese-cns11643-2) |
69 |
|
|
70 |
(make-coding-system |
(make-coding-system |
71 |
'chinese-iso-8bit 2 ?c |
'chinese-iso-8bit 2 ?c |
72 |
"ISO 2022 based EUC encoding for Chinese GB2312 (MIME:GB2312)" |
"ISO 2022 based EUC encoding for Chinese GB2312 (MIME:GB2312)." |
73 |
'(ascii chinese-gb2312 nil nil |
'(ascii chinese-gb2312 nil nil |
74 |
nil ascii-eol ascii-cntl nil nil nil nil) |
nil ascii-eol ascii-cntl nil nil nil nil) |
75 |
'((safe-charsets ascii chinese-gb2312) |
'((safe-charsets ascii chinese-gb2312) |
83 |
|
|
84 |
(make-coding-system |
(make-coding-system |
85 |
'chinese-hz 0 ?z |
'chinese-hz 0 ?z |
86 |
"Hz/ZW 7-bit encoding for Chinese GB2312 (MIME:HZ-GB-2312)" |
"Hz/ZW 7-bit encoding for Chinese GB2312 (MIME:HZ-GB-2312)." |
87 |
nil |
nil |
88 |
'((safe-charsets ascii chinese-gb2312) |
'((safe-charsets ascii chinese-gb2312) |
89 |
(mime-charset . hz-gb-2312) |
(mime-charset . hz-gb-2312) |
126 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
127 |
|
|
128 |
(make-coding-system |
(make-coding-system |
129 |
'chinese-big5 3 ?B "BIG5 8-bit encoding for Chinese (MIME:Big5)" |
'chinese-big5 3 ?B |
130 |
|
"BIG5 8-bit encoding for Chinese (MIME:Big5)." |
131 |
nil |
nil |
132 |
'((safe-charsets ascii chinese-big5-1 chinese-big5-2) |
'((safe-charsets ascii chinese-big5-1 chinese-big5-2) |
133 |
(mime-charset . big5) |
(mime-charset . big5) |
169 |
;; Chinese CNS11643 (traditional) |
;; Chinese CNS11643 (traditional) |
170 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
171 |
|
|
172 |
|
(defvar big5-to-cns (make-translation-table) |
173 |
|
"Translation table for encoding to `euc-tw'.") |
174 |
|
;; Could have been done by china-util loaded before. |
175 |
|
(unless (get 'big5-to-cns 'translation-table) |
176 |
|
(define-translation-table 'big5-to-cns big5-to-cns)) |
177 |
|
|
178 |
|
(define-ccl-program ccl-decode-euc-tw |
179 |
|
;; CNS plane 1 needs either two or four bytes in EUC-TW encoding; |
180 |
|
;; CNS planes 2 to 7 always need four bytes. In internal encoding of |
181 |
|
;; Emacs, CNS planes 1 and 2 need three bytes, and planes 3 to 7 need |
182 |
|
;; four bytes. Thus a buffer magnification value of 2 (for both |
183 |
|
;; encoding and decoding) is sufficient. |
184 |
|
`(2 |
185 |
|
;; we don't have enough registers to hold all charset-ids |
186 |
|
((r4 = ,(charset-id 'chinese-cns11643-1)) |
187 |
|
(r5 = ,(charset-id 'chinese-cns11643-2)) |
188 |
|
(r6 = ,(charset-id 'chinese-cns11643-3)) |
189 |
|
(loop |
190 |
|
(read-if (r0 < #x80) |
191 |
|
;; ASCII |
192 |
|
(write-repeat r0) |
193 |
|
;; not ASCII |
194 |
|
(if (r0 == #x8E) |
195 |
|
;; single shift |
196 |
|
(read-if (r1 < #xA1) |
197 |
|
;; invalid byte |
198 |
|
((write r0) |
199 |
|
(write-repeat r1)) |
200 |
|
(if (r1 > #xA7) |
201 |
|
;; invalid plane |
202 |
|
((write r0) |
203 |
|
(write-repeat r1)) |
204 |
|
;; OK, we have a plane |
205 |
|
(read-if (r2 < #xA1) |
206 |
|
;; invalid first byte |
207 |
|
((write r0 r1) |
208 |
|
(write-repeat r2)) |
209 |
|
(read-if (r3 < #xA1) |
210 |
|
;; invalid second byte |
211 |
|
((write r0 r1 r2) |
212 |
|
(write-repeat r3)) |
213 |
|
;; CNS 1-7, finally |
214 |
|
((branch (r1 - #xA1) |
215 |
|
(r1 = r4) |
216 |
|
(r1 = r5) |
217 |
|
(r1 = r6) |
218 |
|
(r1 = ,(charset-id 'chinese-cns11643-4)) |
219 |
|
(r1 = ,(charset-id 'chinese-cns11643-5)) |
220 |
|
(r1 = ,(charset-id 'chinese-cns11643-6)) |
221 |
|
(r1 = ,(charset-id 'chinese-cns11643-7))) |
222 |
|
(r2 = ((((r2 - #x80) << 7) + r3) - #x80)) |
223 |
|
(write-multibyte-character r1 r2) |
224 |
|
(repeat)))))) |
225 |
|
;; standard EUC |
226 |
|
(if (r0 < #xA1) |
227 |
|
;; invalid first byte |
228 |
|
(write-repeat r0) |
229 |
|
(read-if (r1 < #xA1) |
230 |
|
;; invalid second byte |
231 |
|
((write r0) |
232 |
|
(write-repeat r1)) |
233 |
|
;; CNS 1, finally |
234 |
|
((r1 = ((((r0 - #x80) << 7) + r1) - #x80)) |
235 |
|
(write-multibyte-character r4 r1) |
236 |
|
(repeat))))))))) |
237 |
|
"CCL program to decode EUC-TW encoding." |
238 |
|
) |
239 |
|
|
240 |
|
(define-ccl-program ccl-encode-euc-tw |
241 |
|
`(2 |
242 |
|
;; we don't have enough registers to hold all charset-ids |
243 |
|
((r2 = ,(charset-id 'ascii)) |
244 |
|
(r3 = ,(charset-id 'chinese-big5-1)) |
245 |
|
(r4 = ,(charset-id 'chinese-big5-2)) |
246 |
|
(r5 = ,(charset-id 'chinese-cns11643-1)) |
247 |
|
(r6 = ,(charset-id 'chinese-cns11643-2)) |
248 |
|
(loop |
249 |
|
(read-multibyte-character r0 r1) |
250 |
|
(if (r0 == r2) |
251 |
|
(write-repeat r1) |
252 |
|
(;; Big 5 encoded characters are first translated to CNS |
253 |
|
(if (r0 == r3) |
254 |
|
(translate-character big5-to-cns r0 r1) |
255 |
|
(if (r0 == r4) |
256 |
|
(translate-character big5-to-cns r0 r1))) |
257 |
|
(if (r0 == r5) |
258 |
|
(r0 = #xA1) |
259 |
|
(if (r0 == r6) |
260 |
|
(r0 = #xA2) |
261 |
|
(if (r0 == ,(charset-id 'chinese-cns11643-3)) |
262 |
|
(r0 = #xA3) |
263 |
|
(if (r0 == ,(charset-id 'chinese-cns11643-4)) |
264 |
|
(r0 = #xA4) |
265 |
|
(if (r0 == ,(charset-id 'chinese-cns11643-5)) |
266 |
|
(r0 = #xA5) |
267 |
|
(if (r0 == ,(charset-id 'chinese-cns11643-6)) |
268 |
|
(r0 = #xA6) |
269 |
|
(if (r0 == ,(charset-id 'chinese-cns11643-7)) |
270 |
|
(r0 = #xA7) |
271 |
|
;; not CNS. We use a dummy character which |
272 |
|
;; can't occur in EUC-TW encoding to indicate |
273 |
|
;; this. |
274 |
|
(write-repeat #xFF)))))))))) |
275 |
|
(if (r0 != #xA1) |
276 |
|
;; single shift and CNS plane |
277 |
|
((write #x8E) |
278 |
|
(write r0))) |
279 |
|
(write ((r1 >> 7) + #x80)) |
280 |
|
(write ((r1 % #x80) + #x80)) |
281 |
|
(repeat)))) |
282 |
|
"CCL program to encode EUC-TW encoding." |
283 |
|
) |
284 |
|
|
285 |
|
(defun euc-tw-pre-write-conversion (beg end) |
286 |
|
"Semi-dummy pre-write function effectively to autoload china-util." |
287 |
|
;; Ensure translation table is loaded. |
288 |
|
(require 'china-util) |
289 |
|
;; Don't do this again. |
290 |
|
(coding-system-put 'euc-tw 'pre-write-conversion nil) |
291 |
|
nil) |
292 |
|
|
293 |
|
(make-coding-system |
294 |
|
'euc-tw 4 ?Z |
295 |
|
"ISO 2022 based EUC encoding for Chinese CNS11643. |
296 |
|
Big5 encoding is accepted for input also (which is then converted to CNS)." |
297 |
|
'(ccl-decode-euc-tw . ccl-encode-euc-tw) |
298 |
|
'((safe-charsets ascii |
299 |
|
chinese-big5-1 |
300 |
|
chinese-big5-2 |
301 |
|
chinese-cns11643-1 |
302 |
|
chinese-cns11643-2 |
303 |
|
chinese-cns11643-3 |
304 |
|
chinese-cns11643-4 |
305 |
|
chinese-cns11643-5 |
306 |
|
chinese-cns11643-6 |
307 |
|
chinese-cns11643-7) |
308 |
|
(valid-codes (0 . 255)) |
309 |
|
(pre-write-conversion . euc-tw-pre-write-conversion))) |
310 |
|
|
311 |
|
(define-coding-system-alias 'euc-taiwan 'euc-tw) |
312 |
|
|
313 |
(set-language-info-alist |
(set-language-info-alist |
314 |
"Chinese-CNS" '((charset chinese-cns11643-1 chinese-cns11643-2 |
"Chinese-CNS" '((charset chinese-cns11643-1 chinese-cns11643-2 |
315 |
chinese-cns11643-3 chinese-cns11643-4 |
chinese-cns11643-3 chinese-cns11643-4 |
316 |
chinese-cns11643-5 chinese-cns11643-6 |
chinese-cns11643-5 chinese-cns11643-6 |
317 |
chinese-cns11643-7) |
chinese-cns11643-7) |
318 |
(coding-system iso-2022-cn) |
(coding-system iso-2022-cn euc-tw) |
319 |
(coding-priority iso-2022-cn chinese-big5 chinese-iso-8bit) |
(coding-priority iso-2022-cn euc-tw chinese-big5 |
320 |
|
chinese-iso-8bit) |
321 |
(features china-util) |
(features china-util) |
322 |
(input-method . "chinese-cns-quick") |
(input-method . "chinese-cns-quick") |
323 |
(documentation . "Support for Chinese CNS character sets.")) |
(documentation . "\ |
324 |
|
Support for Chinese CNS character sets. Note that EUC-TW coding system |
325 |
|
accepts Big5 for input also (which is then converted to CNS).")) |
326 |
'("Chinese")) |
'("Chinese")) |
327 |
|
|
328 |
(provide 'chinese) |
(provide 'chinese) |